2

私は Ember アプリを開発していますが、本当に素晴らしいです。しかし、私には解決できない厄介な問題があります。アプリでルーティングを使用し、独自のビューを持つ 2 つの異なるコントローラーを使用します。最初のコントローラーから 2 番目のコントローラーへのバインド プロパティを使用しようとすると、そのプロパティは 2 番目のビューに反映されません。簡単に言えば、次のようなものがあります。

router = Em.Router.extend({.....});
App = Em.Application.create({
    Router: router,
    FirstCtrl: Em.Controller.extend({x:'ABC'}),
    FirstView: Em.View.extend({...}),   
    SecondCtrl: Em.Controller.extend({xBinding:'Em.App.router.firstCtrl.x', y:'123'}),
    SecondView: Em.View.extend({...}),
});
App.initialize();
Em.App = App;

2番目のビューのテンプレートに次のようなものがある場合:

Binding property: {{x}}
Property with no binding: {{y}}

「ABC」はビューに表示されませんが、「123」ではそのような問題はありません。

私のブラウザでは、Em.App.router.firstCtrl.x を使用して Javascript コンソールからそのプロパティにアクセスできますが、Em.App.router.secondCtrl.x は未定義を返します。だから、私の質問はなぜそのプロパティにアクセスできないのですか? そのバインディングをどのように記述すればよいですか?

よろしくお願いいたします。

4

1 に答える 1

2

Emバインディングの最初は必要ないと思います。これを試してください..

SecondCtrl: Em.Controller.extend({xBinding:'App.router.firstCtrl.x', y:'123'}),

コメントをまとめると:

  • controllersember で定義されているものはすべて、ルーティング中にコントローラーで終了する必要があります。たとえばrouter.get('applicationController').connectOutlets('home')、対応するコントローラーを呼び出す場合は、App.HomeControllerまたはApp.homeController

  • 'App.router.yourController.yourProperty'の代わりに使用をバインディングしながら'Em.App.router.yourController.yourProperty'

  • connectControllersグローバルバインディングを避けたい場合は、コントローラー全体のプロパティにアクセスするために使用することもできます
  • 于 2012-09-27T08:15:25.033 に答える