backbone collection fetch()仅返回一条记录

时间:2013-06-16 04:59:23

标签: backbone.js

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

来自服务器的响应属于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)) {

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

3 个答案:

答案 0 :(得分:2)

我只能猜测。如果你能提供收集代码就会很棒。

  1. 确保模型idAttribute(如果被覆盖)是唯一的。
  2. 检查您的集合parse方法是否被覆盖。它应该返回对象数组。
  3. 尝试使用addremovemerge http://backbonejs.org/#Collection-set

答案 1 :(得分:1)

我找到了原因,

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

Backbone.Model.prototype.on('request',function(model, xhr, options){ ... });

答案 2 :(得分:0)

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

在模型中撤消idAttribute属性或在集合中撤消modelId方法可能会有帮助。

您可以使用.findWhere({_id: pkId})代替.get(pkId)