Emberjs:路由器中的条件重定向

时间:2012-06-25 14:09:47

标签: ember.js ember-old-router

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

3 个答案:

答案 0 :(得分: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.next时,不要错过enter,状态转换始终处于待处理状态,因此您必须在此之后进行转换。

我们使用它如真实所示,但您可以想象在任何条件下使用它......

答案 1 :(得分:3)

新路由器现在包含

beforeModel 

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

之前调用
model 
调用

钩子并传递一个

transition

对象。您可以决定是否要使用

重定向到其他路线
transitionToRoute()

如果您不想通过调用

重定向,则可以中止转换
transition.abort()

答案 2 :(得分:2)

根据您尝试做的事情,您可能正在寻找条件转换。 another stackoverflow question涵盖了这一点,其TLDR是检查this fiddle