在错误操作上转换到上一个路径ember.js

时间:2015-09-07 10:04:52

标签: ember.js routing ember-cli

我在ember中处理以下情况: -

  1. 我必须转换到具有模型钩子的路线。模型钩子返回一个promise。 (假设路线A - >路线B,路线B有一个模型钩子返回一个承诺)
  2. 当B中的模型挂钩正在运行时,输入加载路径(用于向用户显示“请稍候”类型msg。)
  3. 如果B中的模型挂钩失败,我需要转换回路径A.我处理路径B中的错误操作。
  4. 问题是,在处理路径B中的错误操作时,前一个路由并不总是路径A.它也可以来自其他路由。

    我尝试了可能的解决方法,但它们对我没有用处: -

    1)使用window.history.back() - 这会失败,因为路由B还没有输入,因为模型钩子承诺失败了。所以我得到了路线A的上一条路线。

    2)使用this.controllerFor('application')。get('currentRouteName') - 这给出了加载路径(当从路径A转换到路径B时,中间路径'加载'被渲染)。

    我可以使用查询Params的条件检查,但我觉得这不高效,因为我必须检查许多条件。

    我只想返回调用路线B的路线。

    如果我错过任何事情,请原谅我。

1 个答案:

答案 0 :(得分:0)

示例项目:Twiddle

我重新打开Ember.Route以捕获所有转换并将当前路由名称保存在应用程序控制器属性中。调用error action时,我将转换到该属性中保存的路由。具有动态细分的路线需要额外处理。

另一种方法:

在你的router.js中,

var Router = Ember.Router.extend({
  location: config.locationType,
  didTransition : function(infos){
    this._super(infos);
    var appController = this.container.lookup('controller:application');
    var crn = infos[infos.length - 1].name;
    if(appController && crn!=='loading' && crn!=='error'){
      Ember.set(appController,'myRouteName',crn);
    }
  }
});

我不确定是否有任何内置解决方案。