2015-01-06 16 views
6

私はemberjsコンポーネントで、オブザーバがヒットしないシナリオを持っています。私は という理由を考え出しました "コンポーネントのプロパティが観察されているときにコンポーネントがまだ挿入されていません。"ember jsコンポーネントオブザーバが動作しません

私の質問は、これはember jsでより良い方法で処理できませんでしたか?

以下のjsbin`sに説明があります。

Not working Scenario

Working scenario

+0

?このシナリオでは、両方のオブザーバ関数が(Ember.Computedを介して)計算されたプロパティとして役立つでしょう。 – awgreenarrow08

+0

合意した、オブザーバーは両方の状況で過労です – Kingpin2k

+0

私がコメントで言及したように、これは例であり、実際のユースケースではありません。実際のユースケースは、私がそれを単純に考えた巨大なものです。 基本的に、オブザーバには多くの計算があり、それを別のプロパティに割り当てるだけではありません。 と言うとき、「両方のオブザーバ関数が計算されたプロパティとして役立ちます」 コンポーネントで計算されたプロパティを使用すると、オブザーバーが働いていないのと同じ理由のために – wallop

答えて

14

あなたは正しい、初期化後に実行するためにオブザーバーを強制的に.on('init')を指定することができます。それ以外の場合は、@ Kingpin2kのように述べた - 彼らは

App.TextboxDisplayComponent = Ember.Component.extend({ 
    displayText: '',   

    boundProperty: '', 

    observeBoundProperty: function() { 
    this.set('displayText', this.get('boundProperty'));   
    }.observes('boundProperty').on('init') 
}); 

は、あなたの(非)実施例は実行されませんhere

正確にあなたがここで達成しようとしているのは何
+1

ちょうど私が欲しかったこと 私はこれを試してみたとき、オブザーバは "on( 'init')のみにヒットすると思っていました。今私はそれをテストし、変更があっても起こる – wallop

+0

しかし、なぜ私はこのコンセプトを以前にも使用しなかった理由を理解しました、これでキャッチがあります! boundPropertyが変更されていない場合でも、observeBoundPropertyはinitで展開されます。もし私がオブザーバーが変更だけに当たって欲しいのであれば、助けにはならないでしょう:) それでも、私はそれの中で状態チェックをすることができますし、最も重要なのはよりクリーンなバージョンです! – wallop

関連する問題