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