Ember.js中是否存在在每次转换时调用的路由挂钩,即使新路由与旧路由相同(例如,单击指向同一路径的顶级导航链接)。
我尝试了activate
,但它只被调用了一次,当我使用顶级导航转到我已经使用的相同路线时,它没有被再次调用。
Example jsFiddle:当我第一次点击“测试”时,会调用activate
挂钩,但是当我第二次点击它时,它不会。
答案 0 :(得分:11)
您可以在路由器中设置didTransition,这正是Ember为Google Analytics设置的方式。
App.Router.reopen({
doSomething: function() {
// do something here
return;
}.on('didTransition')
});
请参阅此处的示例:http://emberjs.com/guides/cookbook/helpers_and_components/adding_google_analytics_tracking/
答案 1 :(得分:6)
Activate
未被第二次调用,因为This hook is executed when the router enters the route...
当您再次点击该链接时,路由器没有做任何事情......如同,没有转换是正在制作(虽然它是“尝试”)。
http://emberjs.com/api/classes/Ember.Route.html#method_activate
我发现最有效的方法是从控制器中观察currentPath
。我将它用于路线之间的动画。
在您的应用程序控制器中,您可以执行以下操作:
currentPathChange: function () {
switch(this.get('currentPath')){
case 'test.index':
this.doSomething();
break;
case 'test.new':
this.doSomethingElse();
break;
}
}.observes('currentPath')
你应该能够从应用程序控制器访问你的应用程序的几乎任何部分,所以这是一个很好的“根钩”,我想。
答案 2 :(得分:5)
你有没有考虑过willTransition
?
http://emberjs.com/guides/routing/preventing-and-retrying-transitions/
App.SomeRoute = Ember.Route.extend({
actions: {
willTransition: function(transition) {
// do your stuff
}
}
});
答案 3 :(得分:2)
更改/破解EmberJS代码并在doTransition()函数中添加jQuery事件触发器。这是最好的,但有点打败了这一点。
截至今天,1年后,Ember 2.0出现了,没有其他方式:(
Ember没有提供跟踪路线改变尝试的方法!这包括URLattemts(历史记录),链接到尝试,哈希更改尝试等。