2016-08-18 7 views
0

同じ階層(兄弟)に2つのコンポーネントが横にあります。私は両方のモデルにモデルを渡しています。私はモデルデータをコンポーネントから変更していて、他のものからすべての変更をキャッチしたいが、コンポーネントのchangeイベントは値を変更するコンポーネントでのみ発生する。他のコンポーネントでは動作しません。どうすればこれを達成できますか?私はちょうど2つのコンポーネントを介して通信したい。アプリコンポーネントのプロパティを変更しても、他のコンポーネントで「変更」は発生しません。

{{applications-list rejectFormData=model.rejectFormData}} 
{{reject-dialog rejectFormData=model.rejectFormData}} 

APP /コンポーネント/拒絶dialog.js

export default Ember.Component.extend({ 
    change() { 
     // this fires only when changed through this component 
     // I want this to fire even when changed from other components 
     alert('changed!'); 
    }, 
    actions: { 
     rejectApplication(formData) { 
      this.set('formData.application_id', 123); 
     } 
    } 
}); 

APP /ルート/

APP /テンプレート/ applications.hbsをapplications.js /components/applications-list.js

export default Ember.Component.extend({ 
    actions: { 

     rejectApplication (application) { 
      this.set('rejectFormData.application_id', application.Application.id); 
     } 
    } 
}); 
+0

代わりに 'Ember.set(formData、 'application_id'、123)'を 'applications-list'と同じようにしてみてください。また、私はコンポーネントの 'change()'フックについて認識していません。どこでそれについて読んだのですか? – locks

答えて

-1

あなたが望むことはできません。アクションは兄弟のようにはならない。あなたは1つのデータを変更することができ、他のもののデータ変更を見ることができます。

データが変更されたときにロジックを実行する場合は、オブザーバを使用する必要があります。

app/components/reject-dialog.js 
export default Ember.Component.extend({ 
    changeObserver: Ember.observer('rejectFormData.application_id', function(){ 
    //do logic 
}), 
    change() { 
     // this fires only when changed through this component 
     // I want this to fire even when changed from other components 
     alert('changed!'); 
    }, 
    actions: { 
     rejectApplication(formData) { 
      this.set('formData.application_id', 123); 
     } 
    } 
}); 
関連する問題