0

我尝试在我的项目中使用主干。但是我在尝试覆盖 Backbone 的解析方法时遇到了问题。服务器发回的数据比我想要的多。例如:我想要的是:

[{
   id: "123",
   name: "david"
},{
   id: "456",
   name: "kevin"
}]

但服务器的结果是:

{
 total: 1000,
 items:[{
   id: "123",
   name: "david"
},{
   id: "456",
   name: "kevin"
}]
}

所以我想在 parse 方法中处理结果并只返回数组。我怎样才能做到这一点?当我尝试时,我得到了错误。我应该怎么做?

4

2 回答 2

7

在您的主干模型中,按照您希望的方式定义解析函数:

Model = Backbone.Model.extend({
    parse: function () {
        return {
            id: this.get("id"),
            name: this.get("name")
        }
    }
});

但是,最好在模型初始化程序中处理和设置数据,如下所示:

Model = Backbone.Model.extend({
    initialize: function (attrs) {
        try {
            //TODO HERE: test for correct values and throw errors

            // set object variables here
            this.set({
                name: attrs.name,
                id: attrs.id
            });

        } catch (e) {
            console.log(e);
        }
    }
});

现在不需要覆盖解析函数。这样你就知道你的模型正在处理的数据是好的,你可以设置它包含的变量。这避免了来自无效数据的许多错误。

数组中的每一项都应该是一个子模型,这就是我上面写的。您的父模型应如下所示:

Model = Backbone.Model.extend({
    initialize: function (items) {
        this.subModels = [];
        items.forEach(function (item) {
            this.subModels.push( new SubModel(item) )
        });
    }
});

或者作为一个集合:

Collection = Backbone.Collection.extend({
    model: ItemModel,
});

您将向其传递 response.items

于 2012-08-20T12:51:43.217 回答
4

来自Backbone Parse 文档

Collection = Backbone.Collection.extend({
    model: YourModel,
    parse: function(response){
        return response.items;
    }
});
于 2012-08-20T14:22:21.493 回答