【问题标题】:How to throw Ember.js errors?如何抛出 Ember.js 错误?
【发布时间】:2014-04-16 06:25:24
【问题描述】:

在 ember.js 应用程序中,我们如何抛出应用程序错误(并让它们在控制器-路由-应用程序层次结构中冒泡?)

我的用例与捕获非 ember-data ajax 错误并通过与 ember 数据错误相同的路径处理它们有关。

(即,当遇到来自 non-restful 端点的错误时,允许该错误在应用程序中冒泡,类似于 ember-data 错误)

【问题讨论】:

  • Ember.assert(condition, "error description") 这就是你要找的?
  • 还在为这个苦苦挣扎。我会在获得更多信息后立即更新。谢谢你的建议。

标签: ember.js


【解决方案1】:

如果要抛出错误,请使用throw new Error("Message");

用户被重定向到error 路由。

通过 Promises,您可以对异常做出反应并处理它们。

见:http://emberjs.com/api/classes/RSVP.Promise.html

【讨论】:

  • 我认为这应该可行,但在 Ajax 错误的情况下,我想我们必须放弃典型的 .fail 处理程序?
  • 一点也不,JQuery Ajax 调用返回一个承诺,所以如果你在你的路由模型函数中返回一个 ajax 调用,ember 将处理任何错误。如果您想自己处理错误,请使用.catch 而不是失败。
  • 这不会将我重定向到 ember 1.5.1 上的错误路线,但加载工作正常。错误子状态是否损坏?
【解决方案2】:

Ember 有自己的 EmberError 类,它是 Javascript 错误类的子类。

import EmberError from '@ember/error';

export default Route.extend({
  /* Pseudo code... */
  model() {
    if(/* something bad happens */) {
      throw new EmberError('Oh, no! Something bad happened!');
    }
  },
});

您可以在路线中的错误操作中对其进行处理。如果你想让它冒泡,记得回true

actions: {
  error(error) {
    // do something
    return true;
  },
},

Ember 会自动创建一个错误子状态和一个错误模板,您可以在其中显示有关错误的信息(无需重定向)。您可以在application-error.hbserror.hbs 中显示错误信息,如下所示:

<h1>{{model.name}} {{model.status}}</h1>
{{model.stack}}

请参阅Ember substate guide 了解更多选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2016-06-14
    • 1970-01-01
    • 2012-10-28
    • 2019-01-03
    相关资源
    最近更新 更多