2012-08-03 90 views
0

http://jsfiddle.net/pauldechov/u4naE/如何在路由器中指定动作处理程序?

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

root: Em.Route.extend({ 

    index: Em.Route.extend({ 
     route: '/', 
     connectOutlets: function(router) { 
      router.get('applicationController').connectOutlet('application'); 
     } 
    }), 

    // why does this work? 
    goHome: Em.Route.transitionTo('home'), 

    // ...but not this? Am I missing something? 
    goHome2: function(router, context) { 
     router.transitionTo('home', context); 
    }, 
    home: Em.Route.extend({ 
     route: 'home' 
    }) 
}) 
}); 

我得到一个错误说: “您必须在当前状态‘root.index’链接到它的事件指定一个目标状态‘goHome2’。”

如何在这里定义一个处理程序,以便我可以返回false并停止传播,例如?我是否应该在视图中这样做,以及如何做到这一点?

谢谢。

+0

对不起,我可以给你一个提示。当你在模板中删除'href = true'时,这似乎工作......但我还没有明白这是什么意思:( – 2012-08-03 23:57:18

回答

1

好吧,我想我已经找到它了。当使用href =“true”时,你必须指定你的函数goHome2是一个eventTransition。看到http://jsfiddle.net/Sly7/u4naE/2/

+0

谢谢!顺便说一下,即使你是在声明所有的eventTransitions不要使用'href =“true”'?仅用于函数或者'Em.Route.transitionTo(...)' – dechov 2012-08-04 00:53:23

+0

这是个好问题。在工作中,我们不使用它,所以我们不要定义eventTransitions,而且我认为保持eventTransitions哈希与代码同步是一个非常艰巨的工作(在我们的应用程序中,我认为我们有上百次转换......)或许通过发布有关ember js github的问题或者搜索因为这将帮助你决定做什么 – 2012-08-04 01:00:11

+1

看起来像使用Em.Route.transition填充eventTransitions哈希:https://github.com/emberjs/ember.js/pull/930 – 2012-08-04 01:07:39

相关问题