我有一条名为estates
的路线,用户可以看到他们拥有的庄园清单,他们可以从中查看一个庄园的详细信息。
要输入estate
路线,我必须传递estate_id
和mode
参数。默认情况下,该模式设置为open
model(params) {
return this.store.queryRecord('estate', params);
},
在某些情况下,可能会返回错误,要求使用其他模式。在这种情况下,将提示用户选择" backup"或"已保存"通过弹出窗口,因为它必须是用户做出的决定。
我尝试了以下期望queryParamsDidChange
挂钩重试转换,但由于Ember尚未进入estate
路由,因此无效。
那么我怎样才能重新尝试从未使用修改过的查询参数解决的转换?
遗产模型摘录:
queryParams: {
mode: {
refreshModel: true,
replace: true
}
},
actions: {
error(reason, transition) {
// 1. Abort the transition so that we don't default to the error page.
transition.abort();
// 2. Set controller's previousTransition property so that we can retry it.
this.controllerFor('estate').set('previousTransiton', transition);
// 3. Parse the error
const promiseErrors = reason.errors;
for (let e=0; e<promiseErrors.length; e++) {
switch(promiseErrors[e].reason) {
case 'backupOrSaved':
this.send('showErrorOnEstateOpen');
return;
}
}
},
},
遗产控制提取物:
queryParams: ['mode'],
mode: 'open',
eventBusService: Ember.inject.service('event-bus'),
_listen: function() {
this.get('eventBusService').on('alterEstateOpenMode', this, '_alterOpenMode');
}.on('init'),
_alterOpenMode(mod) {
this.set('mode', mod.mode);
},
答案 0 :(得分:0)
我不确定这是不是这样做的方法,但是如果我处于你的情况,我会重新尝试用旧转换中的不同查询参数重建一个新的转换。
如果转换中没有动态细分,则只需执行
即可//your transition
var transition = someSavedTransition;
var newQueryParams = {foo: "foo"};
this.transitionTo(transition.targetName, newQueryParams);
如果您有动态细分,或者您需要更加通用,则需要提取transition.params
,并且可能transitionTo.apply(route, anArrayYouBuilt)
arrayYouBuilt
其中0
的转换位于索引{{1}所有模型都在1->(n-1)
索引n
和查询参数,其中n =动态分段数+ 1。
最后,转换在其对象上有queryParmas
,因此如果您只想替换其中一个queryParams并将其余部分保留在新的transitionTo中,$.extend(transition.queryParams, {keyToReplace: valueToReplace});
希望有所帮助