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

时间:2015-03-03 15:01:30

标签: ember.js promise

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

  

"原因"错误(即抛出异常或promise拒绝值)将作为其模型传递给该错误状态。

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

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上面的代码。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

这有点令人讨厌,但是传递给reason的{​​{1}}必须是一个对象,才能将其作为模型正确地传递给错误状态。

以下是您所需要的:

reject

然后,对于您的错误模板,您只需引用App.FailRoute = Ember.Route.extend({ model() { return new Ember.RSVP.Promise((_, reject) => { reject({error: 'This is an error message'}); }); } });

这对我有用,而只是使用字符串作为{{model.error}}没有...