6

Ember ルーターを使用する場合、コントローラーに接続されているテンプレートでアクションを定義するにはどうすればよいですか?

例はこちら: http://jsfiddle.net/KvJ38/3/

[マイ プロファイル] には 2 つのアクションがあります。1 つは State で定義され、動作中です。どうすればこれを機能させることができますか、または別のアプローチを使用する必要がありますか?

App.Router = Em.Router.extend({
  enableLogging: true,
  location: 'hash',

  root: Em.State.extend({
    // EVENTS
    goHome: Ember.State.transitionTo('home'),
    viewProfile: Ember.State.transitionTo('profile'),

    // STATES
    home: Em.State.extend({
      route: '/',
      connectOutlets: function(router, context) {
        var appController = router.get('applicationController');
        appController.connectOutlet(App.HomeView);
      }
     }),

    // STATES
    profile: Em.State.extend({
      route: '/profile',
        connectOutlets: function(router, context) {
          var appController = router.get('applicationController');
          appController.connectOutlet(App.ProfileView);
        }
    }),

    one: function() {
      alert("eins");
    },
  }) 
});
4

3 に答える 3

13

アクションのデフォルトのターゲットはルーターですが、テンプレートで別のターゲットを定義できます。

{{action two target="controller"}}

そして、「App.ProfileController」に「2」関数を追加します。

アップデート

この回答は、うまくいけば2012年半ばに正しかった.現在(2014年9月)、ドキュメントには次のように記載されています。

デフォルトでは、{{action}}ヘルパーはテンプレートのコントローラーでメソッドをトリガーします。[...] コントローラーがアクション オブジェクトのアクションと同じ名前のメソッドを実装していない場合、アクションはルーターに送信され、そこで現在アクティブなリーフ ルートにアクションを処理する機会が与えられます。[...] テンプレートのコントローラーも現在アクティブなルートもハンドラーを実装していない場合、アクションは親ルートにバブリングし続けます。最終的に、ApplicationRouteが定義されている場合、アクションを処理する機会があります。アクションがトリガーされたが、一致するアクション ハンドラーがコントローラー、現在のルート、または現在のルートの祖先のいずれかに実装されていない場合、エラーがスローされます。

于 2012-06-15T13:10:57.253 に答える
4

@Stéphane で指摘されているように、ターゲット属性を明示的に指定して、アクションを別の場所に送信できます。

指定されていない場合、アクション ヘルパーのターゲットは controller.target です。ご指摘のとおり、これは通常ルーターに設定されています。

デフォルトのターゲットを変更したいテンプレートがある場合は、コントローラーの target プロパティを設定することでそれを実現できます。たとえば、ターゲットをコントローラー自体に設定するには、次のようにします。

App.MyController = Ember.Controller.extend({
  init: function(){
    this._super();
    this.set('target', this);
  };
});
于 2012-07-22T22:28:46.830 に答える
0

コントローラーは、アクションイベントを「直接」担当するべきではありません。状態/ルートは。

https://github.com/emberjs/ember.js/issues/1015がお役に立てば幸いです。

于 2012-06-19T08:54:17.317 に答える