2011-10-21 17 views
0

モデル内で2つの値(aまたはb)が変更された場合、2つのリスニングビューで3つ目の値を計算する必要があります。Backbone.jsモデルの従属属性

//Pseudo 
mainModel 
    a : 2000 
    b : 3000 

view1 
helper.calculateC(this.model.get(a), this.model.get(b)) 

view2 
helper.calculateC(this.model.get(a), this.model.get(b)) 

( 計算はかなり複雑であり、「C」は、後にユーザーによって上書き ことが許されるかもしれないと。)私はむしろモデルに依存属性cを置くところは良い習慣とは何ですか? モデルを拡張する必要がありますか、サブモデルを作成するのですか?

ありがとうございます!

答えて

5

modelにバインディングを追加して、initializeコールの独自の変更イベントに追加することができます。

initialize: function() { 
    this.bind("change", this.calculateC); 
}, 

calculateC: function() { 
    this.c = //fill in the blanks 
}  

具体的には、必要な属性のみをバインドできます。

this.bind("change:a", this.calculateC); 
    this.bind("change:b", this.calculateC); 
+0

ただし、モデル変更イベントの前にCは計算されません。したがって、ビューはcの最新値にアクセスできません。あるいは、モデルが何らかの形で変更イベントを発生させる前にこれを計算できるということですか?ありがとう。 – dani

+0

上記はうまくいくようです:)しかし、ビューの前にモデルがどのように通知されるのか理解できません。 (そして、モデルの属性として「c」を設定し、その変更イベントを発生させたい場合、私は何をしますか?)感謝! – dani

+0

自分で変更イベントをフックする最初のイベントであるため、イベントが最初に表示されます。 Initializeはコンストラクタで呼び出されますので、最初にそれをフックすることがわかります... –

関連する問題