0

こんにちは。この問題について貴重なご協力をいただき、誠にありがとうございます。

私は 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 を次に示します。

これについてのあなたの助けに感謝します!

4

2 に答える 2

0

コントローラーが Ember によってインスタンス化されると、小文字で始まる名前が割り当てられます。これは、Ember の命名規則と一致しています。this.get('controllers.a') を試してください。

于 2013-09-10T22:56:49.003 に答える