我正在尝试检测何时发生路由转换。我已将此代码段放在处理转换的最新版本的Ember(v1.0.0-pre.4
)中:
didTransition: function(infos) {
// Don't do any further action here if we redirected
if (infos[infos.length-1].handler.transitioned) { return; }
var appController = this.container.lookup('controller:application'),
path = routePath(infos);
set(appController, 'currentPath', path);
this.notifyPropertyChange('url');
if (get(this, 'namespace').LOG_TRANSITIONS) {
Ember.Logger.log("Transitioned into '" + path + "'");
}
},
我将我的Ember应用程序设置为window.App = Ember.Application.create()
。
我注意到它调用this.notifyPropertyChange('url');
,但我尝试将观察者附加到我的应用App.Router
或App.Router.router
,我收到错误,因为它没有实现Ember.Observable
如何在不为每条路线创建特殊的Ember.Route的情况下检测路线路径的变化?
答案 0 :(得分:9)
更新的答案
您现在可以简单地在路由器的didTransition
事件上绑定观察者:
App.Router.reopen({
doSomethingOnUrlChange: function() {
console.log(this.get('url'));
}.on('didTransition')
});
参见工作示例:http://jsfiddle.net/Sly7/3THD7/
以下是弃用的答案
在这里的片段中,有set(appController, 'currentPath', path);
我认为你可以把观察者放在这个属性上。
我不知道您希望收到通知的确切位置,但可以在ApplicationController本身中执行此操作。
App.ApplicationController = Ember.Controller.extend({
currentPathDidChange: function(){
// the currentPath has changed;
}.observes('currentPath');
});
请参阅此工作小提琴,例如:http://jsfiddle.net/qKrwU/