backbone.js更新模型默认值

时间:2011-07-07 03:53:33

标签: javascript backbone.js

如何更新模型的默认对象?

例如,假设我在下面建模了Box对象。它的默认“Color”属性设置为“#FFF”。

用户开始与服务器交互后,服务器会在某个时刻传回新的默认颜色#000。我希望从该点开始实例化的所有新框默认为#000的颜色属性。

顺便说一句,假设我执行此更新,因为默认值是通过引用传递的,所有现有的框也将更新其默认值。这是对的吗?

var Box = Backbone.Model.extend({
    defaults: {
        "Colour"  : "#FFF"
    }
});

2 个答案:

答案 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;

这种方法可能适用于您的应用,也可能不适用,因为它可能有必要成为实例属性的原因。但它似乎是一个类的属性而不是一个类的实例。