2016-08-08 6 views
1

Ember Computed PropertyとEmber Observerを使用するときのトピックをカバーするように思われた前の質問はありませんでした。 Computed Propertyは以前の属性を使用して新しい属性を生成し、実行ループで更新されることを理解します。Ember Computed Property対Ember Observer

一方、オブザーバは実行ループ外で更新され、Computedプロパティでも何かを見ることができます。それはあらゆるタイプの変化に反応します。

Person = Ember.Object.extend({ 
    // these will be supplied by `create` 
    firstName: null, 
    lastName: null, 

    fullName: Ember.computed('firstName', 'lastName', function() { 
    return `${this.get('firstName')} ${this.get('lastName')}`; 
    }), 

    fullNameChanged: Ember.observer('fullName', function() { 
    // deal with the change 
    console.log(`fullName changed to: ${this.get('fullName')}`); 
    }) 
}); 

Emberのマニュアルには、オブザーバーが通常は過度に使用されていると記載されています。誰かがオブザーバーの正しい使い方のより良い例を挙げることができますか?それ以外に何を見ることができるのですか、誤った使用法と正しい使用法の効果は何ですか?

ソースコードは、燃えさしのドキュメントで見つけることができます:https://guides.emberjs.com/v2.3.0/object-model/observers/

答えて

3

コンピュープロパティは、新しい属性を作成を支援するために、以前の属性を使用して実行ループ

はい、しかしレイジーに更新され、 - 参照された場合にのみ、の依存関係が変更され、キャッシュされた値が無効になります。

Emberのマニュアルでは、通常、オブザーバーは一般に使用されていると記載されています。

はい、監視対象のプロパティが変更されるたびに、観察者は、使用されないものを再計算する理由があっても同期して発生します。オブザーバーを使って何が計算されるべきかを知ることは、古典的なEmberの反パターンの1つです。

大規模なアプリケーションをいくつか確認したところ、変更されたときにサードパーティのライブラリを呼び出したり、新しいUI言語を選択したときにアプリケーションの言語を変更したりするようなオブザーバが使用されていました。

+0

@toruzaburo "オブザーバーを使って計算するべきものは、古典的なEmberの反パターンの1つです。"したがって、これを悪用する例は、計算されたプロパティが実際にそれを行うことができるときに、ストア内のアイテムの数を数えるオブザーバーになりますか? – Taztingo