我在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文件目前?
Fetch是异步的,所以也许当你登录到你的控制台的数据还没有被获取?你是否在取回时使用了成功回调函数?
app.myCollection.fetch({reset: true},success: function() {console.log(app.myCollection);});