javascript - Backbone.js 获取和设置嵌套对象属性

标签 javascript backbone.js backbone-model

我有一个关于 Backbone.js 的 getset 函数的简单问题。

1) 使用下面的代码,如何直接“获取”或“设置”obj1.myAttribute1?

另一个问题:

2) 在模型中,除了defaults 对象,我可以/应该在哪里声明我的模型的其他属性,以便可以通过 Backbone 的 get 和 set 方法访问它们?

var MyModel = Backbone.Model.extend({
    defaults: {
        obj1 : {
            "myAttribute1" : false,
            "myAttribute2" : true,
        }
    }
})

var MyView = Backbone.View.extend({
    myFunc: function(){
        console.log(this.model.get("obj1"));
        //returns the obj1 object
        //but how do I get obj1.myAttribute1 directly so that it returns false?
    }
});

我知道我能做到:

this.model.get("obj1").myAttribute1;

但这是好的做法吗?

最佳答案

虽然 this.model.get("obj1").myAttribute1 很好,但它有点问题,因为你可能会想对集合做同样类型的事情,即

this.model.get("obj1").myAttribute1 = true;

但如果这样做,您将无法获得 myAttribute1 的主干模型的好处,例如更改事件或验证。

更好的解决方案是永远不要在模型中嵌套 POJSO(“普通的旧 JavaScript 对象”),而是嵌套自定义模型类。所以它看起来像这样:

var Obj = Backbone.Model.extend({
    defaults: {
        myAttribute1: false,
        myAttribute2: true
    }
});

var MyModel = Backbone.Model.extend({
    initialize: function () {
        this.set("obj1", new Obj());
    }
});

那么访问代码就是

var x = this.model.get("obj1").get("myAttribute1");

但更重要的是设置代码是

this.model.get("obj1").set({ myAttribute1: true });

这将触发适当的更改事件等。此处的工作示例:http://jsfiddle.net/g3U7j/

关于javascript - Backbone.js 获取和设置嵌套对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6351271/

相关文章:

php - 如何让用户在FCK编辑器中添加对象标签?

jquery - 使用 CoffeeScript 更改特定元素中的类

javascript - 将多个属性更改绑定(bind)到 Backbone.js 模型的正确方法

javascript - 与 Backbone 模型通信的 Backbone 集合

javascript - 图表工具提示自动隐藏

javascript - 如何使用 d3.js 限制半径大小

Javascript slider ,如何为滚动分配最大值以使其不会溢出?

javascript - 使用主干从服务器获取数据并创建模型和集合

javascript - 使我的旧工作流程适应 Backbone

javascript - 无法从主干集合获取数据