2

我正在尝试从服务器获取对象列表,该集合接受第一条记录并忽略其余记录。

来自服务器的响应是类型application/json

 [{"id":1,"name":"A"}, 
  {"id":2,"name":"B"}, 
  {"id":3,"name":"C"}]

在客户端,

 var collection = new Backbone.Collection;
 collection.url = 'url_to_the_resource';

 collection.fetch();
 console.log( collection.toJSON());

输出是

 [{"id":1,"name":"A"}]

编辑

我在集合准备好时调用log,即异步调用完成后如下:

collection.fetch().done( function() {
  console.log( collection.toJSON() );
});

并且仍然获得了一项记录。我还检查了backbone.js 源代码,并在行中找到了以下内容682

    // If a duplicate is found, prevent it from being added and
    // optionally merge it into the existing model.
    if (existing = this.get(model)) {

并在该行之后添加了一个日志记录,发现主干合并了所有模型,为什么?

4

3 回答 3

2

我只能猜测。如果您可以提供收藏代码,那就太好了。

  1. 确保模型idAttribute(如果它被覆盖)是唯一的。
  2. parse如果它被覆盖,请检查您的收集方法。它应该返回对象数组。
  3. 尝试玩add, remove, merge http://backbonejs.org/#Collection-set
于 2013-06-16T05:43:16.437 回答
1

我找到了原因,

这是因为我在模型原型上附加了一个事件

Backbone.Model.prototype.on('request',function(model, xhr, options){ ... });
于 2013-06-16T08:31:44.257 回答
0

最有可能是 Override 问题,
甚至原始 JSON 数据的每条记录都完全不同。


撤销Model 中的idAttribute属性或撤销Collection 中的modelId方法可能会有所帮助。


你可以使用.findWhere({_id: pkId})而不是.get(pkId)

于 2015-10-30T12:13:33.010 回答