如何重写主干集合以返回子属性中的模型

How to override Backbone collection to return models in child property

本文关键字:返回 属性 模型 集合 何重写 重写      更新时间:2023-09-26

我有一个返回模型集合的API,但它不是Backbone期望的传统格式 - 模型数组。 相反,集合有一些全局属性,然后模型位于分配给集合属性的数组中。 像这样:

{
    foo: 'bar',
    models: [
        { id: 1, prop1: 'abc' },
        { id: 2, prop1: 'xyz' },
        { id: 3, prop1: '123' }
    ]
}

我无法更改 API,所以我必须接受这种数据格式。 如何调整数据,以便 Backbone 集合仅获取模型数组? 我在模型上遇到过类似的情况,只是编写了一个自定义的 toJSON() 方法,该方法返回带有模型数据的正确属性,但这似乎在这里不起作用。

你需要覆盖集合的parse方法,在那里你得到整个响应对象,你需要返回一个数组,Backbone 将使用这个数组来填充你的集合:

var MyCollection = Backbone.Collection.extend({
    parse: function(response) {
        return response.models;
    }
});