2012-04-05 9 views
2

モデルをコントローラにバインドしています。データをリロードしてビューを更新できるように、フィールドの変更を監視したいと思います。コントローラ内のバインドされたモデルの任意のフィールドの変化を観察

今私はこのようなものは本当に非DRYを持っている:

goalController = Ember.Object.create({ 
    ... 
    recompute: function() { save model, load recomputed data from server } 
    ... 
    nameChanged: function() { this.recompute() }.observes('content.name'), 
    incomeChanged: function() { this.recompute() }.observes('content.income') 
}); 

は、これを行うのエンバー-yの方法はありますか?

答えて

7

そうのようなあなたの例を書き換えることができるようにあなたは、一度設定複数のオブザーバーをすることができます:ここで

goalController = Ember.Object.create({ 

    goalUpdated: function() { 
     // do your thing 
    }.observes("content.name", "content.income") 

}); 

はフィドルです:http://jsfiddle.net/rlivsey/upZDU/

+0

あなたはまた、としてそれを書くことができる必要があります: ' '' goalController = Ember.Object.create({ goalUpdated:機能(){// あなたのことを行う } .observes( "コンテンツ{名前、収入}。") }); '' ' – srt32

+0

これは@ str32でも動作しますが、5+のプロパティを持つモデルでは実際には見苦しいかもしれません。私はモデルの中に 'alarm'プロパティを作成しました。そして、オブザーバの帽子は、コントローラの中から観測したいすべてのプロパティに対して、モデルの中のアラームをトグルします。最後に、 'model.alarm'を観察します。まだ醜いですが、コントローラはこのシナリオではモデルの内部構造を必要としません。 – robertodecurnex