在Ember应用程序上,我正在实现一个向导。它由几个步骤组成(每个步骤都有自己的路线)。
我想存储用户启动向导的路径(包括其模型和查询参数,如果有的话)。 在向导的最后,我想将用户重定向到初始路由。
例如:
/myapp/some/route --> click on a link to start the wizard
/myapp/wizard/step1
/myapp/wizard/step2
/myapp/wizard/step3 --> click to end the wizard
/myapp/some/route --> the initial page
我该怎么做?
在向导步骤1的beforeModel(transition)
中,我发现:
this.get('router.currentRouteName')
给我上一条路线的名称this.modelFor(previousRoute)
给我模型this.paramsFor(previousRoute)
给我这些参数但是,我找不到如何向后重放过渡,或者如何重新创建过渡以返回到初始路线。
编辑:为问题添加更多上下文
我的路由器配置:
Router.map(function () {
...
this.route('inbox', {
path: '/inbox'
},
function () {
this.route('msg', {path: '/msg'});
this.route('encaissements', {path: '/encaissements'});
}
);
...
在wizard-route.js中
beforeModel(transition) {
this._super(...arguments);
let previousRoute = this.get('router.currentRouteName');
if (previousRoute && previousRoute !== 'loading') {
// store the previous route in the router
this.set('router.previousRoute', previousRoute);
this.set('router.previousModel', this.modelFor(previousRoute));
this.set('router.previousParams', this.paramsFor(previousRoute));
}
}
actions: {
redirectToPreviousOrDefault(defaultRoute) {
let previousRoute = this.get('router.previousRoute');
if (previousRoute) {
// a previous route exist, redirect !
let previousModel = this.get('router.previousModel');
let previousParams = this.get('router.previousParams');
if (previousModel) {
if (previousParams) {
this.transitionTo(previousRoute, previousModel, previousParams);
} else {
this.transitionTo(previousRoute, previousModel);
}
} else if (previousParams) {
this.transitionTo(previousRoute, previousParams);
} else {
this.transitionTo(previousRoute);
}
}
}
}
在向导结束时,我将动作称为redirectToPreviousOrDefault
。
this.get('router.previousRoute') --> inbox.msg
this.get('router.previousModel') --> undefined
this.get('router.previousParams') --> {}
因此,在这种情况下,将调用行this.transitionTo(previousRoute, previousParams);
。并产生此错误:
未捕获的错误:传递的上下文对象多于路由的动态段:inbox.msg