我正在尝试从服务器获取对象列表,该集合接受第一条记录并忽略其余记录。
来自服务器的响应属于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)) {
并在该行之后添加了一个日志记录,发现主干合并了所有模型,为什么?
答案 0 :(得分:2)
我只能猜测。如果你能提供收集代码就会很棒。
parse
方法是否被覆盖。它应该返回对象数组。add
,remove
,merge
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)