2011-07-07 17 views
3

モデルのデフォルトオブジェクトを更新するにはどうすればよいですか?backbone.jsモデルのデフォルト値を更新する

たとえば、Boxオブジェクトが以下のようにモデル化されているとします。デフォルトの "Color"属性に "#FFF"が設定されています。

ユーザーがサーバーとやりとりを開始すると、サーバーはある時点で新しいデフォルトの色#000を返します。その時点以降にインスタンス化されたすべての新しいボックスをデフォルトの#000の色属性に設定します。

この更新を実行すると仮定すると、既定値は参照によって渡されるため、既存のすべてのボックスの既定値も更新されます。これは正しいです?

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

答えて

9

デフォルトは

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'を使用する必要があります。

(私は私が正しくあなたの質問を解釈願っています)

3

Color属性が実際に保存されているモデルの状態ではないようです。クラスプロパティにする方が適切かもしれません。だから、これを行う可能性があります:

var Box = Backbone.Model.extend({ 

    // Instance properties here. 

}, { 

    colour: '#FFF' 

}); 

、あなたは、このプロパティを使用する必要がある場合のように、あなたはそれを参照:あなたはそれを変更する必要がある場合や、あなただけの必要があります

Box.colour 

を:

Box.colour = #000; 

このアプローチは、インスタンスプロパティである必要がある理由がある可能性があるため、アプリには適切である場合とそうでない場合があります。しかし、それはクラスのプロパティのように見えるクラスのインスタンスよりも。

+0

おかげで私はBox.prototype.defaults._attribute_技術のために特別に探していた@Billが、クラスのプロパティ対インスタンスに関するこの議論はあまりにも便利です。 – fortuneRice

関連する問題