【问题标题】:Ember router with transient states具有瞬态的 Ember 路由器
【发布时间】:2012-10-01 16:08:53
【问题描述】:

Emberjs: Conditional redirect in router 的启发,我想我可以在 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

谁能发现我做错了什么?

谢谢, 乔恩。

【问题讨论】:

    标签: ember.js ember-old-router


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多