如何在 Ember 的错误模板中显示 Promise 拒绝数据?

How do I display Promise rejection data in Ember's error template?

我想在我的 Ember 错误模板中显示有关被拒绝的模型承诺的信息。 Ember error routing documentation says:

The "reason" for the error (i.e. the exception thrown or the promise reject value) will be passed to that error state as its model.

所以这里有一些代码试图对此进行测试,应用程序路由拒绝带有错误消息的承诺,以及一个错误路由和尝试显示它的模板:

App.Router.map(function() {
  this.route('fail');
});

App.FailRoute = Ember.Route.extend({
  model: function() {
    return new Ember.RSVP.Promise(function(resolve, reject) {
      reject('This is an error message');
    });
  }
});

App.ErrorRoute = Ember.Route.extend({
  setupController: function(controller, model) {
    this._super.apply(this, arguments);

    // This always alerts with "Error model is null", when I expect
    // "Error model is This is an error message" instead
    alert('Error model is ' + model);
  }
})

错误模板:

  <h2>An error happened</h2>

  {{#if model}}
  Message: {{model}}
  {{else}}
  But no message was given
  {{/if}}

当我尝试这样做时,我的错误路由(以及模板)从未接收到拒绝对象作为其模型。

Here is a JSBin 加上上面的代码。

这似乎是一个错误,但至少在通过承诺拒绝的情况下 - 这对我有用。

App.FailRoute = Ember.Route.extend({
  model: function() {
    return new Ember.RSVP.Promise(function(resolve, reject) {
      reject('This is an error message');
    });
  },

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

然后,在错误模板中:

<script type="text/x-handlebars" data-template-name="error">
  {{link-to 'Back' 'index'}}

  <h2>An error happened</h2>

  {{#if model}}
    Message: {{model.error}}
  {{else}}
    But no message was given
  {{/if}}
</script>

您更新的(工作)JSBIN here

这有点烦人,但是您传递给 rejectreason 必须是一个对象才能作为其模型正确传递给错误状态。

这就是您所需要的:

App.FailRoute = Ember.Route.extend({
    model() {
        return new Ember.RSVP.Promise((_, reject) => {
            reject({error: 'This is an error message'});
        });
    }
});

然后对于您的错误模板,您只需参考 {{model.error}}

这对我有用,而仅使用字符串作为 reason 并没有...