以下是àpp/pods
内部的结构:
|-application
|-index
|-error
|-user
||-index
||-view
||-edit
发生错误时,ember不会加载error
路由。
相反,它会尝试加载index_error
或user_error
之类的子路线,但这些路线不存在。
如何在任何错误时强制Ember加载根error
路由?
Ember v2.1 Ember-Cli v1.13.8
答案 0 :(得分:1)
我设法在pod结构中显示错误路由,如下所示:
-app
--pods
----something
------template.hbs
------route.js
----error
------template.hbs
如果我在某些/ route.js上抛出错误,如下所示:
export default Ember.Route.extend({
model() {
throw new Error('AAA');
}
});
让error/template.hbs
包含内容:
Arrrh, errror!!!!
显示错误消息。
如果您想要something
的错误子路线,我认为您需要以下内容:
-app
--pods
----something
------template.hbs
------route.js
------error
--------template.hbs
----error
------template.hbs
答案 1 :(得分:1)
您提供的结构实际上应该完全按照您所描述的那样完成。
查看this twiddle查看示例。点击“查看用户”将转换为user.view
路线,但点击“修改用户”会在user.edit
路线中引发异常,而是让您登陆error
路线。
需要注意的一点是,不应在router.js
中自行添加错误路由。它接收转换错误作为其模型,因此如果您手动执行this.route('error')
并且不为其指定动态细分,则转换将失败。
如果您希望更准确地控制在任何转换期间发生错误时发生的情况,您可以在应用程序路径上实施error
操作。
actions: {
error(thrownError) {
this.transitionTo('my-error-route'); // Or whatever other handling you want
}
}
您可以在this twiddle中看到这种安排的完整示例。请注意,这与default error behavior略有不同,因为它将产生完整的转换(即URL将被更新),而不是仅仅移动到子状态。
答案 2 :(得分:0)
http://guides.emberjs.com/v2.1.0/routing/loading-and-error-substates/
根据上述app/application/error
是pod结构中的默认值。