Ember重试从失败的承诺转换到新的查询参数

时间:2016-01-28 15:11:51

标签: ember.js ember-data ember-cli

我有一条名为estates的路线,用户可以看到他们拥有的庄园清单,他们可以从中查看一个庄园的详细信息。

要输入estate路线,我必须传递estate_idmode参数。默认情况下,该模式设置为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);
},

1 个答案:

答案 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});

希望有所帮助