こんにちは。この問題について貴重なご協力をいただき、誠にありがとうございます。
私は EmberJS の世界ではまったく新しいので、問題は Ember ではなく私に起因する可能性がありますが、それを修正する正しい方法が見つかりません。
a という名前のテンプレート、AAView という名前のビュー (そのテンプレートも含む)、および 2 つのコントローラー AAController と BController があります。
テンプレート 'a' は、部分メソッドを使用してレンダリングされます。
{{部分的な「a」}}
AAController は AAView のコントローラーであり、「a」テンプレートにある AAOutlet に接続されています。
this.render('aa', {
outlet: 'AAOutlet',
into: 'application'
});
この AAView には、AAController の isShown プロパティを監視するオブザーバーがあります。
App.AAView = Ember.View.extend({
visibilityDidChanged: function() {
console.log('Visibility just changed man! Do something!');
}.observes('controller.isShown')
});
このisShown変数は AAController にあります。
App.AAController = Ember.ObjectController.extend({
isShown: false
});
そして、この変数は他のコントローラー (BController) で設定されます:
App.BController = Ember.ObjectController.extend({
needs: ['AA'],
myVal: '',
myValDidChanged:function() {
//Conditions and a lot of interesting stuffs
this.get('controllers.AA').set('isShown', true);
}.observes('myVal')
});
スクリプトが実行されてこのコードに到達すると、コントローラーの変更がビューに通知されません...
this.get('controllers.AA').set('isShown', true); でデバッガーを停止すると、行、this.get('controllers.AA')は、ビューによって使用および観察されたコントローラーではなく、他の(または新しい?)コントローラーを返すようです。
したがって、問題はどこにあり、BController で適切なコントローラーを取得して値を編集し、ビューでオブザーバーをトリガーするにはどうすればよいですか?
--> 問題を簡略化した jsFiddle を次に示します。
これについてのあなたの助けに感謝します!