10

有没有办法在 Ember.js 路由器中进行条件重定向,而不会破坏路由器的内部一致性?

4

3 回答 3

23

你可以做的(截至今天)是这样的:

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.nextas while you are in enter,状态转换始终处于挂起状态,因此您必须在那之后进行转换。

我们将其用于 authent,但您可以想象将其用于您必须的任何条件...

于 2012-06-25T15:36:05.723 回答
3

新路由器现在包括一个

beforeModel 

钩子,您可以在转换到路线时覆盖它以包含条件逻辑。beforeModel 钩子将在

model 

钩子被调用,它被传递了一个

transition

目的。您可以决定是否要使用重定向到另一条路线

transitionToRoute()

或者如果您不想通过调用重定向,您可以中止转换

transition.abort()
于 2014-04-28T09:31:30.617 回答
2

根据您要执行的操作,您可能正在寻找条件转换。这包含在另一个 stackoverflow 问题中,其 TLDR 是检查这个小提琴

于 2012-07-26T16:06:14.730 回答