6

Ember.js では、コントローラーで処理されないイベントが、ルーター チェーンを介してアプリケーション ルートに伝播します (詳細については、http://emberjs.com/guides/views/handling-events/を参照してください)。

イベントがルーターに伝播し続けることを可能にするイベントハンドラーをコントローラーで定義する方法はありますか?

App.SampleController = Ember.ObjectController.extend({
  myEvent: function(obj) {
    this.set('aVariable', true);
  }
});

App.ApplicationRoute = Ember.Route.extend({
  events: {
    myEvent: function(obj) {
      this.transitionTo('something');
    }
  }
});

CarsController の myEvent ハンドラが内部状態変数を設定するだけでなく、アプリケーション ルートへのチェーンをイベントをキックする方法はありますか? 私はこれを認識しています:

App.__container__.lookup('router:main').send('myEvent', obj);

しかし、それは Ember 内部を使用します。これを行うためのより標準的な方法があることを望んでいました。

4

1 に答える 1

6

これを達成する1つの方法は次のとおりです。

App.SampleController = Ember.ObjectController.extend({
  needs: 'application',
  myEvent: function(obj) {
    this.set('aVariable', true);

    this.get('controllers.application').send('myEvent');
  }
});

作業デモ

それが役に立てば幸い。

于 2013-07-19T16:37:38.437 に答える