具有瞬态的 Ember 路由器



灵感来自Emberjs:路由器中的条件重定向 我想我可以在 Ember 路由器中使用瞬态,因为这就是该问题中的"索引"路由 - 它被输入并立即过渡到另一种状态,没有新事件触发它。

我可以使用以下代码(动作触发transitionTwice)获得所需的效果,但是 URL 以相反的顺序更新,使其处于第一个状态,即使应用程序以正确的顺序遍历状态,以预期的最后一个状态结束。

App.Router = Ember.Router.extend({
    enableLogging: true,
    root: Ember.Route.extend({
        transitionTwice:  Ember.Route.transitionTo('twiceStep1'),
        index: Ember.Route.extend({
            route: '/',
        }),
        twiceStep1: Ember.Route.extend({
            route: '/twiceStep1',
            connectOutlets: function (router) {
                router.transitionTo('twiceStep2');
            }
        }),
        twiceStep2: Ember.Route.extend({
            route: '/twiceStep2',
        })
    })
}),
App.initialize();

控制台输出显示正确的状态更改:

STATEMANAGER: Sending event 'transitionTwice' to state root.
STATEMANAGER: Entering root.twiceStep1
STATEMANAGER: Entering root.twiceStep2

但是,该 URL 最终位于:

...test2.html#/twiceStep1

谁能发现我做错了什么?

谢谢乔恩。

我已经能够通过将第二个transitionTo()调用包装在Ember.run.next()中来使其成功工作。

Ember.run.next(function () {
    router.transitionTo('twiceStep2');
});

问题是,对于任何转换,URL 都会在connectOutlets()调用完成后更新。这意味着,随着调用的完成,从嵌套和 URL connectOutletstransitionTo的链接调用将以相反的顺序更新。

虽然这解决了我的直接问题,但我不确定这是否真的构成了问题的最终答案,因为这意味着最终状态需要知道它将从以前的瞬态进入 - 这不是好的分离。 但我想我应该记录下来,以防其他人与这种异常作斗争。

最新更新