如何覆盖 Backbone 的解析函数? [英] how to override Backbone's parse function?

查看:14
本文介绍了如何覆盖 Backbone 的解析函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I try to use backbone in my project. But I have met problem when try to overide parse method of Backbone. The server has send back more data than I want.For example: What I want is:

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

但是服务器的结果是:

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

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

so I want process result in parse method and return only the array. How can I do this? When I try I got error. How should I do?

推荐答案

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

In your backbone model, define the parse function the way you would like:

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

但是,最好在模型初始值设定项中处理和设置数据,如下所示:

But, it would be better to handle and set the data in the model initializer, like so:

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

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

No need to overwrite the parse function now. This way you know the data that your model is handling is good, and you set what variables it contains. This avoids many errors from invalid data.

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

Each item in the array should really be a submodel, which is what I have written above. Your parent model should look like:

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 传递给它

To which you would pass response.items

这篇关于如何覆盖 Backbone 的解析函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆