我在Backbone JS中收集一个集合的初始数据时遇到了一些麻烦。
虽然开发myCollection
没有从服务器获取数据,但我只是这样传递了它:
app.myCollection.reset([
{ person: 'Sally'},
{ person: 'Peter'},
{ person: 'Paul'},
{ person: 'Wilma'}
]);
执行console.log(app.myCollection);
向我显示该集合已正确填充,因为它length
为4:
s {length: 4, models: Array[4], _byId: Object}
现在我想从服务器获取数据,响应如下:
[
{
"person": "Sally"
},
{
"person": "Peter"
},
{
"person": "Paul"
},
{
"person": "Wilma"
}
]
不幸的是,出现问题,因为length
属性现在为0,尽管我可以在对象中找到数据。
s {length: 0, models: Array[0], _byId: Object}
我这样做:
app.myCollection.fetch({reset: true});
对我来说,看起来只有外部数组得到"映射"到模型,而不是数组中的每个对象。
我该怎么做才能防止这种情况发生?
修改 正如评论中所建议的,我包含了一个" id"归因于响应。现在,它看起来像这样:
[
{
"id": 1,
"person": "Sally"
},
{
"id": 2,
"person": "Peter"
},
{
"id": 3,
"person": "Paul"
},
{
"id": 4,
"person": "Wilma"
}
]
不幸的是,有些东西仍然不对,因为该集合现在看起来像这样:
s {length: 0, models: Array[0], _byId: Object}
_byId: Object
length: 4
models: Array[4]
__proto__: s
所以你看,一个长度为0,另一个长度为4.这可能是因为我刚刚链接到一个json文件?
答案 0 :(得分:3)
Fetch是异步的,所以当您登录控制台时,数据还没有被提取?你在fetch上使用成功回调函数吗?
app.myCollection.fetch({reset: true},success: function() {console.log(app.myCollection);});