当前位置: 首页 > 知识库问答 >
问题:

如何重写骨干的解析函数?

颛孙晗昱
2023-03-14

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

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

但服务器的结果是:

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

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

共有2个答案

潘高岑
2023-03-14

从主干解析文档

Collection = Backbone.Collection.extend({
    model: YourModel,
    parse: function(response){
        return response.items;
    }
});
益光亮
2023-03-14

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

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

 类似资料:
  • 场景: 这段代码不起作用,而且我找不到一种方法来调用一个像继承的那样的特性函数。我尝试调用、、、以及以下命令: 什么都不起作用。 是否有方法使其工作,或者我必须完全重写比这复杂得多的trait函数:)

  • 我有一个扩展类,在这里我扩展了,如下所示,它工作得很好。 但是现在,我需要为某个视图控制器更改它的标题,所以我想过它的重写,但是失败了。如何可以重写它,以便我可以更改它的?

  • 我希望有一个结构,它接受任意数量的lambdas,并作为所有调用操作符的中心调用点。 如果使用与构造时给出的任何 lambda 不匹配的参数列表调用调用运算符,则应调用默认调用运算符。 我以为下面的代码可以完全做到这一点。每个 lambda 的调用运算符都通过使用“提升”到 类。 当我在结构中没有默认的call操作符时,一切都像预期的那样工作(使用有效的参数列表)。如果我将它添加到结构中(如上面的

  • 每个人都知道基类的分解器通常必须是虚拟的。但是派生类的析构函数是什么?在 C 11 中,我们有关键字“override”,并且能够显式使用默认析构函数。 在子类的析构函数中同时使用关键字“覆盖”和“=默认”是否正确?在这种情况下,编译器会生成正确的虚拟析构函数吗? 如果是,那么我们是否可以认为这是好的编码风格,我们应该总是这样声明派生类的析构函数,以确保基类析构函数是虚的?

  • 问题内容: 我正在做一个ribs.js项目,我在叫我的github仓库。我已经引导了我的Collections和Models,因此一旦构建页面,它们就会存在,但是当我调用model.fetch()时,我收到以下消息:(用用户名替换:username) 我已经读了几则消息post1,post2,它们提到了修改ribs.sync函数,但我不完全确定该怎么做。到目前为止,这是我的代码(这在我的Backb

  • 我有一个收藏模型的典型结构。 在视图中,每个对象都有一个“编辑”按钮,该按钮应该取消激活其他对象的所有“编辑”按钮。 我想知道这样做的最佳做法是什么。谢谢!!