2012-02-25 5 views
4

私は以下のようなプロパティで更新しているEmber.Objectを持っていますが、それでも私がprimaryDemoを変更してRateを変更すると、変更されます。私はなぜこれが、どのように私はそれを修正することができるのか困惑しています。表示されている計算されたプロパティが連続して2回変更された場合に発生しません

dependantChanged: function() { 
    console.log('Firing change'); 
    this.get('_update')(this); 
}.observes('primaryDemo', 'Rate', 'Totals'), 

UPDATE:だから最初の答えとフィドルは、私は、問題が何であったかのよう考えるようになった、それはオブジェクト自体をオブジェクトのプロパティを変更していないが原因です。私はemberが違いがあるかどうかを見るためにハッシュチェックをすると思います。私の場合はすでにアンダースコアを使用していますので、プロパティを変更してから、セットを実行する前に_.clone(デモ)を使用してください。私はむしろそれをやっていないので、これを閉じる前により洗練された解決策があるかどうかを見て待っています。

+0

感謝。つまり、primaryDemoのプロパティを変更するとobserveメソッドはトリガーされませんが、primaryDemo全体を変更するだけでobserveメソッドがトリガーされます。 – YuC

答えて

2

もう一度primaryDemoを設定する必要はありません。 exampleでは何もしません。 Emberにあなたの観察者に通知するように強制する必要があります。偉大な質問のSee this fiddle ...

var demo = { Imps: 1, Demo: { Id: 2 } } 

var obj = Ember.Object.create({ 
    dependantChanged: function() { 
     console.log('Firing change'); 
    }.observes('primaryDemo', 'Rate', 'Totals'), 
}); 

obj.set('primaryDemo', demo); 
demo.Imps = 2; 
obj.set('primaryDemo', demo); 

// Notify observers on obj#primaryDemo 
Ember.notifyObservers(obj, 'primaryDemo'); 

1

詳細をお知らせください。私はあなたの説明からシンプルなJSFiddle http://jsfiddle.net/JjbXb/を作成しましたが、行の同じプロパティを変更すると、うまく動作します。

2度目のコールでprimaryDemoの値が異なるのは確実ですか?

+0

確かに、私はそれをrepoに更新しました。具体的には、primaryDemoオブジェクトのプロパティを変更しています。私の場合、私はprimaryDemoの値を取得し、Impsプロパティを変更してから設定します。 jsfiddleの例が添付されています:http://jsfiddle.net/JjbXb/1/ – dariusriggins

+0

あなたはRoy Danielsのソリューションと一緒に行くべきだと思います。 – pangratz

+0

その場合、実際にはプロパティの値を変更していません。同じオブジェクトです。オブジェクトはJSで参照によって割り当てられるため、オブジェクトの変更はすでにprimaryDemoプロパティに反映されています。 'primaryDemo.Imps'を観察してみてください。 –

関連する問題