Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何覆盖主干的解析函数?_Javascript_Backbone.js - Fatal编程技术网

Javascript 如何覆盖主干的解析函数?

Javascript 如何覆盖主干的解析函数?,javascript,backbone.js,Javascript,Backbone.js,我尝试在我的项目中使用主干。但我在尝试跳过主干的解析方法时遇到了问题。服务器发回的数据超出了我的需要。例如: 我想要的是: [{ id: "123", name: "david" },{ id: "456", name: "kevin" }] 但服务器的结果是: { total: 1000, items:[{ id: "123", name: "david" },{ id: "456", name: "kevin" }] } 所以我希望在p

我尝试在我的项目中使用主干。但我在尝试跳过主干的解析方法时遇到了问题。服务器发回的数据超出了我的需要。例如: 我想要的是:

[{
   id: "123",
   name: "david"
},{
   id: "456",
   name: "kevin"
}]
但服务器的结果是:

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

所以我希望在parse方法中得到处理结果,并只返回数组。我该怎么做?当我尝试时,我犯了错误。我该怎么做?

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

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,
});
您将向其传递响应。项来自


如果您没有发布任何代码,您希望我们如何帮助您修复代码?到目前为止您尝试了什么?如果我能最好地回答您的问题,请务必选中该框。
Collection = Backbone.Collection.extend({
    model: YourModel,
    parse: function(response){
        return response.items;
    }
});