Обнаружение переходов маршрутов в EmberJS 1.0.0-pre.4

Я пытаюсь определить, когда происходит переход маршрута. Я нашел этот фрагмент кода в последней версии 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 для каждого из моих маршрутов?


person tina nyaa    schedule 20.01.2013    source источник


Ответы (1)


ОБНОВЛЕННЫЙ ОТВЕТ

Теперь вы можете просто привязать наблюдателя к событию 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/

person sly7_7    schedule 20.01.2013
comment
Этот наблюдатель не срабатывает при переходе, например, от /pages/1 к /pages/2, потому что путь остается прежним: pages.page.index. - person Willem de Wit; 01.03.2013
comment
Это должно быть currentPathIsChanging, а не currentPathDidChange, потому что, когда вы включаете ведение журнала LOG_TRANSITIONS: true, вы можете видеть, что он вызывается непосредственно перед переходом. Таким образом, в этом методе вы даже можете остановить переход и перенаправить на другой маршрут. - person Wojciech Bednarski; 05.04.2013
comment
@WojciechBednarski На самом деле, я думаю, что значение наблюдателя в том, что свойство currenPath изменилось. Для меня это не зависит от того факта, что маршрутизатор эффективно переходит после изменения currentPath. Возможно, не следует. - person sly7_7; 05.04.2013