如何更新模型的默认对象?
例如,假设我在下面建模了Box对象。它的默认“Color”属性设置为“#FFF”。
用户开始与服务器交互后,服务器会在某个时刻传回新的默认颜色#000。我希望从该点开始实例化的所有新框默认为#000的颜色属性。
顺便说一句,假设我执行此更新,因为默认值是通过引用传递的,所有现有的框也将更新其默认值。这是对的吗?
var Box = Backbone.Model.extend({
defaults: {
"Colour" : "#FFF"
}
});
答案 0 :(得分:10)
使用
可以轻松更改默认值Box.prototype.defaults.Colour = '#000'
当你改变它时,已经创建的框将在其原型链的深处有一个新值
myBox.__proto__.constructor.prototype.defaults.Colour === '#000'
但这并不重要,它不会更改来自myBox.get('Colour')
的值,因为默认值会在实例化时复制到myBox.attributes
。要更改现有的框,您必须使用myBox.set({'Colour': '#000'})
或myBox.attributes.Colour = '#000'
。
(我希望我能正确解释你的问题)
答案 1 :(得分:3)
您的Color属性似乎并非真正保存的模型状态。将它作为类属性可能更合适。所以你可以这样做:
var Box = Backbone.Model.extend({
// Instance properties here.
}, {
colour: '#FFF'
});
然后如果您需要使用此属性,请将其引用为:
Box.colour
如果您需要更改它,您只需要执行:
Box.colour = #000;
这种方法可能适用于您的应用,也可能不适用,因为它可能有必要成为实例属性的原因。但它似乎是一个类的属性而不是一个类的实例。