Javascript 储存并返回灰烬路线
在Ember应用程序上,我正在实现一个向导。它由几个步骤组成(每个步骤都有自己的路线) 我想存储用户启动向导的路径(如果有模型和查询参数的话)。 在向导结束时,我想将用户重定向到初始路由 例如:Javascript 储存并返回灰烬路线,javascript,ember.js,Javascript,Ember.js,在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 wizar
/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(以前的路线)
给我参数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.transitiono(previousRoute,previousParams)代码>被调用。并产生以下错误:
未捕获错误:传递的上下文对象多于路由的动态段:inbox.msg我认为您的问题没有那么复杂,但归结为transition()
transiono()
可能是野兽。它的论点是高度动态的。您可以将零传递给无限模型和可选选项散列。模型和选项散列都是对象。所以它需要一种更复杂的方法来决定最后一个参数是模型还是选项散列。为此,它检查对象是否具有queryParams
属性。您正在传递{}
,它没有该属性,因此被认为是一个模型
您可以在源代码中找到有关该实现细节的更多信息:您是否可以使用transitiono
手动触发到存储路由的转换并查询参数?我找不到正确使用transitiono
的方法。我更新了问题以反映我的最后一次尝试。