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.RouterApp.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 に答える