2

我正在尝试检测何时发生路由转换。我在v1.0.0-pre.4处理转换的最新版本的 Ember ( ) 中找到了这个代码片段:

  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 的情况下检测路由路径何时更改?

4

1 回答 1

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/

于 2013-01-20T14:16:12.817 回答