2016-10-20 40 views
1

我试图做一些听起来很简单的事情。我想渲染服务器错误到我的application.hbs的出口。Ember + Ember数据,在应用程序级别处理错误子状态,Ember 2.8

阅读本文档,https://guides.emberjs.com/v2.6.0/routing/loading-and-error-substates/,我能够检测到我的错误,但我似乎无法按照给定的模式将错误作为模型传递给我的error.hbs。

如果我注册错误操作处理程序在我的应用程序路由上,我能够呈现我的error.hbs模板,但我无法访问我正在处理的错误对象的上下文。此外,我的URL路由更新,这是不希望的。

actions: { 
    error(err, transition) { 
     return this.transitionTo('error'); 
    } 
} 

使用此处理程序,我做打底error.hbs我的出口,但我不从我的错误对象的任何上下文来渲染该模板。如果我尝试在错误的模型来传递,我得到这个错误:眼下

More context objects were passed than there are dynamic segments for the route: error 

,无论何时出现错误加载模型,我只是得到的是永远挂着一个正在加载的旋转状态。相反,我希望显示服务器错误。

回答

0

错误作为模型传递给错误子状态。 throw n或reject ed的对象将是您的错误子状态的模型,其属性将是属性。

例如,如果您使用throwRSVP.reject{ message: 'An Error Occurred' },那么您可以使用{{model.message}}在error.hbs中显示该错误。我从未见过原始图案工作。

Here is a twiddle that demonstrates working error substates(加载/拒绝和/未定义的路线以查看其他示例)。

从玩弄

模板/应用error.hbs(也可以是error.hbs)的代码

<p>Application-Error Template</p> 
<p>model: {{model}}</p> 
<p>model.message: {{model.message}}</p> 
<p>model.customMessage: {{model.customMessage}}</p> 

路由/ throw.js

model(params) { 
    throw { customMessage: 'Reject Error Message' }; 
}, 

路由/ reject.js

model(params) { 
    return Ember.RSVP.reject({ customMessage: 'Reject Error Message' }); 
}, 

routes/undefined.js

model(params) { 
    use.undefined.value; 
},