Emberjs:路由中的条件重定向

10

在不破坏Ember.js路由器的内部一致性的情况下,是否有一种带有条件重定向的方法?


你能再解释一下为什么你要从connectOutlets转换到另一个路由吗?(我在Ember方面有点新手,所以也许我不理解你想做什么) - MilkyWayJoe
1
顺便提一下,路由现在有一个redirect:元素可以被覆盖,它在当前指南中。 - totowtwo
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({
        // ...
    })
})

当你处于enter状态时,状态转换始终是未决的,因此不要错过Ember.run.next,这样你就必须在那之后进行转换。

我们将其用于身份验证,但您可以想象将其用于任何您需要的条件...


4
如果你在connectOutlets中执行它而不是在enter中执行,那么你就不需要使用Ember.run.next - Peter Wagenet
你有使用connectOutlets的示例吗? - Qrilka
好的,代码完全相同,除了在 Ember.run.next(function () { ... }); 中的包装。 - Mike Aski

3
新路由器现在包括一个
beforeModel 

在切换路由时,您可以重写的钩子来包含条件逻辑。beforeModel钩子将在之前调用。

model 

钩子被调用并传递了一个参数。
transition

对象。您可以决定是否要使用重定向到另一个路由。

transitionToRoute()

如果您不想重定向,您可以通过调用中止转换来取消转换

transition.abort()

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接