主干JS:获取一个集合——JSON响应格式的问题



我在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);});

最新更新