Ember.js路由器对控制器的操作

Lux*_*Lux 5 ember.js ember-old-router

当我使用Ember路由器时,如何在模板中定义连接到控制器的操作?

一个例子在这里:http: //jsfiddle.net/KvJ38/3/

Unter My Profile是两个动作:一个在State上定义,并且正在工作两个在Controller上定义.我怎样才能使这个工作或我应该使用另一种方法?

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");
    },
  }) 
});
Run Code Online (Sandbox Code Playgroud)

Sté*_*ond 12

操作的默认目标是路由器,但您可以在模板中定义另一个:

{{action two target="controller"}}
Run Code Online (Sandbox Code Playgroud)

并在"App.ProfileController"中添加"两个"功能.

UPDATE

这个答案有望在2012年中期正确.现在(2014年9月),文件说:

默认情况下,{{action}}帮助程序会触发模板控制器上的方法.[...]如果控制器没有实现与其操作对象中的操作同名的方法,则该操作将被发送到路由器,其中当前活动的叶子路由将有机会处理该操作.[...]如果模板的控制器和当前活动的路由都没有实现处理程序,则操作将继续冒泡到任何父路由.最终,如果ApplicationRoute定义了一个,它将有机会处理该行动.触发操作但在控制器,当前路由或任何当前路由的祖先上未实现匹配的操作处理程序时,将引发错误.