Ember.js 路由操作中的触发器余烬错误子状态

Ember.js 路由操作中的触发器余烬错误子状态,ember.js,routing,Ember.js,Routing,假设我有一个BananaNewRoute,它负责显示新的Banana表单并创建一个Banana App.BananaNewRoute = Ember.Route.extend model: -> @store.createRecord('banana') actions: create: @currentModel.save().then => @transitionTo "banana", @currentModel 因为我的应用程序的输入是严格控制的,

假设我有一个
BananaNewRoute
,它负责显示新的
Banana
表单并创建一个
Banana

App.BananaNewRoute = Ember.Route.extend
  model: -> @store.createRecord('banana')

  actions:    
    create: @currentModel.save().then => @transitionTo "banana", @currentModel
因为我的应用程序的输入是严格控制的,所以可以安全地假设如果服务器返回任何类型的错误,那么这就是应用程序错误,用户对此无能为力。每当
save
操作被拒绝时,我希望通过将用户转换到一个单独的
error
模板来处理这个问题


我查看了文档,但它似乎只适用于
模型
前模型
后模型
挂钩。我无法让它为我的
create
操作工作。如何实现这一点?

保存
返回承诺。然后,promise的函数会同时接受一个通过和一个失败的函数(请原谅转换后的咖啡脚本)

或者使用javascript,并对其进行一些分解

var pass = function(results){};
var fail = function(error){};

save().then(pass, fail);
要手动转换到错误路由,只需调用

this.transitionTo('error', reason);
范例

对于更深层次的错误路由也可以这样做

this.transitionTo('foo.error', 'it died');

为了在路由器操作中正确转换到错误子状态,您需要使用它,它允许您在不转换url的情况下转换到错误子状态

更新后的代码如下所示

App.BananaNewRoute = Ember.Route.extend
  model: -> @store.createRecord('banana')

  actions:    
    create: @currentModel.save().then(
      () => @intermediateTransitionTo("banana", @currentModel))

您还可以对所有承诺使用全局错误处理程序,如下所示:

// Global error handler for promises
Ember.RSVP.on('error', function(error) {
   //do whatever needed 
});

这样做可能更容易,因此您不必在每个客户机-服务器(promise)交互上处理错误

再次感谢回复@kingpin2k!我已经说了那么多,但我不知道当拯救承诺被拒绝时如何触发余烬的错误子状态。嘿@kingpin2k,你介意再看一眼吗?提前谢谢。哦,很抱歉,我显然是想回到这里,哪个错误子状态,比如错误路径?没问题。:)是的,错误路线。我的目标是在出现错误时显示一个页面。上面添加了一个示例,老实说,我不知道如何做到这一点,我喜欢这个想法,可能是对文档的一个很好的补充。
// Global error handler for promises
Ember.RSVP.on('error', function(error) {
   //do whatever needed 
});