我有一个关于 Backbone.js 的 get 和 set 函数的简单问题。
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/