Маршрутный крючок Ember.js должен быть вызван при каждом переходе

Есть ли крючок маршрута в Ember.js, который вызывается при каждом переходе, даже если новый маршрут совпадает с старым маршрутом (например, нажав ссылку навигации верхнего уровня на тот же маршрут).

Я пробовал activate, но он только вызывается один раз и не вызывается снова, когда я использую навигацию верхнего уровня, чтобы перейти к тому же маршруту, в котором я уже находился.

Пример jsFiddle: Когда я нажимаю "Тест" в первый раз, вызывается activate hook, но когда я нажимаю его второй раз, это не.

Ответы

Ответ 1

Вы можете настроить 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/

ОБНОВЛЕНИЕ: (новая ссылка, поскольку старая не работает) https://guides.emberjs.com/v1.10.0/cookbook/helpers_and_components/adding_google_analytics_tracking/

Ответ 2

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')

Вы должны иметь возможность получить доступ практически к любой части вашего приложения из контроллера приложения, так что это хороший "корневой хук", я полагаю.

Пример: http://jsfiddle.net/mattblancarte/jxWjh/2/

Ответ 4

Выполните код Alter/Hack EmberJS и добавьте триггер события jQuery внутри функции doTransition(). Это лучше, но как бы победить точку.

По состоянию на сегодняшний день, через год и Ember 2.0, нет НИКАКИХ ДРУГИХ способов: (

Ember не обеспечивает способ отслеживания попыток изменения маршрута! Это включает URLattemts (история), ссылки на попытки, попытки изменения хэша и т.д.