Ember.js - Pod结构中的错误状态

时间:2015-10-22 10:09:55

标签: javascript ember.js ember-cli

以下是àpp/pods内部的结构:

|-application
|-index
|-error
|-user
||-index
||-view
||-edit

发生错误时,ember不会加载error路由。 相反,它会尝试加载index_erroruser_error之类的子路线,但这些路线不存在。

如何在任何错误时强制Ember加载根error路由?

Ember v2.1 Ember-Cli v1.13.8

3 个答案:

答案 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结构中的默认值。