Ember.js 路由器操作到 Controller

标签 ember.js ember-old-router

当我使用 Ember Router 时,如何在模板中定义连接到 Controller 的操作?

示例如下: http://jsfiddle.net/KvJ38/3/

在“我的个人资料”下有两个操作: 一个是在国家上定义的,并且正在工作 两个是在 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");
    },
  }) 
});

最佳答案

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

{{action two target="controller"}}

并在“App.ProfileController”中添加“二”函数。

更新

这个答案在 2012 年中期有望是正确的。现在(2014 年 9 月),文档说:

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

关于Ember.js 路由器操作到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11050956/

相关文章:

ember.js - 建模嵌套 json 结构

ember.js - emberjs - 将动态参数传递给组件助手

ember.js - 如何使用 Ember.js 和 ember-data 创建新记录?

javascript - 如何在运行时向 Ember.Router 添加路由或状态?

javascript - Ember.js - 在 Controller /路由器链上传播事件

javascript - 在 Handlebars [object Object] 错误中访问 JSON 对象

javascript - 在 Ember.js 2 中获取 Handlebars 模板上的当前路线名称

ruby-on-rails - 使用 Rails 的 EmberJS 路由

routes - Ember.js:路由器/路由和StateManager/状态之间有什么区别?

Ember.js 路由、导出和动画