Emberjs: условное перенаправление в маршрутизаторе

Есть ли способ иметь условную переадресацию в Ember.js Router, не нарушая внутренней согласованности маршрутизатора?

Ответ 1

Что вы могли бы сделать (на сегодняшний день), это что-то вроде этого:

root: Ember.Route.extend({
    index: Ember.Route.extend({
        enter: function(router) {
            var logged = /* get from appropriated source... */;
            Ember.run.next(function() {
                if (logged) {
                    router.transitionTo('loggedIn');
                } else {
                    router.transitionTo('loggedOut');
                }
            });
        }
    }),

    loggedIn: Ember.Route.extend({
        // ...
    }),

    loggedOut: Ember.Route.extend({
        // ...
    })
})

Не пропустите Ember.run.next, пока вы находитесь в enter, переход состояния всегда ожидает, поэтому вам нужно перейти после этого.

Мы используем его, как показано для аутентификации, но вы можете предположить, что используете его для любого условия, которое вам нужно...

Ответ 2

Новый маршрутизатор теперь включает

beforeModel 

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

model 
Вызывается

hook и передается

transition

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

transitionToRoute()

или вы можете прервать переход, если вы не хотите перенаправлять, вызывая

transition.abort()