如果我想在我的主干模型中添加自定义属性,那么最好是这样做吗?是否有更好的方法或完全不同的方法来实现我想要实现的功能?
var myModel = Backbone.Model.extend({
defaults:{
monthly_amount: 100
},
initialize: function(model, options){
var m = this;
Object.defineProperty(this,"yearly_amount",{
get: function() {
return (m.get("monthly_amount") * 12);
},
set: function(value) {
m.set("monthly_amount", (value/12) );
}
});
}
});
谢谢!
编辑:该属性只是"虚拟",我不希望它在将模型保存到服务器时属于模型属性。
答案 0 :(得分:2)
因此,这里的一般问题通常被称为“计算属性”,并且有骨干的插件可以提供此功能(见下文)。 Backbone使用get/set
方法调用样式而不是defineProperty
样式,因此您的方法会使值计算对视图不透明,因此非常强烈地偏离主干的设计。维护正确的get/set
和change
接口的插件将维护基本的Model API,因此视图不必以不同方式处理此特定模型属性。
可用插件:
答案 1 :(得分:0)
当您将属性设置为默认值时,它会转到属性,但它不适合我们。 由于Backbone模型是常规对象,因此您可以访问对象属性的属性:
var myModel = Backbone.Model.extend({}),
model = new myModel();
model.monthly_amount = 50;
console.log(model.monthly_amount)
或像这样创建setter和getter:
var myModel = Backbone.Model.extend({
setMonthlyAmount: function (value) {
this.monthly_amount = value;
},
getMonthlyAmount: function () {
return this.monthly_amount;
}
});
//access with getter/setter
var model = new myModel();
model.setMonthlyAmount(20);
var result = model.getMonthlyAmount();
console.log(result);