Backbone JS:获取集合 - JSON响应格式的问题

时间:2015-06-01 21:02:13

标签: backbone.js

我在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文件?

1 个答案:

答案 0 :(得分:3)

Fetch是异步的,所以当您登录控制台时,数据还没有被提取?你在fetch上使用成功回调函数吗?

    app.myCollection.fetch({reset: true},success: function() {console.log(app.myCollection);});