Backbone.js 主干集合fetch()仅返回一条记录
当我试图从服务器获取对象列表时,集合接受第一条记录并忽略其余记录 来自服务器的响应类型为Backbone.js 主干集合fetch()仅返回一条记录,backbone.js,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(); conso
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"}]
编辑
当收集准备就绪时,即异步调用完成后,我调用日志,如下所示:
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)) {
在那行之后添加了一个日志,发现主干合并了所有的模型,为什么呢?我只能猜测。如果你能提供收集代码,那就太好了
确保模型(如果被覆盖)是唯一的
如果已重写集合parse
方法,请检查该方法。它应该返回对象数组
尝试玩添加
,删除
,合并
我找到了原因
这是因为我在模型原型上附加了一个事件
Backbone.Model.prototype.on('request',function(model, xhr, options){ ... });
最有可能是覆盖问题,
甚至原始JSON数据的每条记录都完全不同
模型中的Revoke属性或集合中的Revoke方法可能会有所帮助
您可以使用.findWhere({u id:pkId})
而不是.get(pkId)
我用来获取的代码就是您上面看到的代码,这意味着除了url之外,我什么都没有更改。我甚至怀疑服务器发送了一个格式错误的json,并创建了一个静态json文件,并将集合url指向它。但仍然只有第一张唱片。谢谢你的回答。