在不破坏Ember.js路由器的内部一致性的情况下,是否有一种带有条件重定向的方法?
你今天可以做的是,像这样:
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
,这样你就必须在那之后进行转换。
我们将其用于身份验证,但您可以想象将其用于任何您需要的条件...
connectOutlets
中执行它而不是在enter
中执行,那么你就不需要使用Ember.run.next
。 - Peter WagenetconnectOutlets
的示例吗? - QrilkaEmber.run.next(function () { ... });
中的包装。 - Mike AskibeforeModel
在切换路由时,您可以重写的钩子来包含条件逻辑。beforeModel钩子将在之前调用。
model
transition
对象。您可以决定是否要使用重定向到另一个路由。
transitionToRoute()
如果您不想重定向,您可以通过调用中止转换来取消转换
transition.abort()
connectOutlets
转换到另一个路由吗?(我在Ember方面有点新手,所以也许我不理解你想做什么) - MilkyWayJoeredirect:
元素可以被覆盖,它在当前指南中。 - totowtwo