簡體   English   中英

如何在Ember的錯誤模板中顯示Promise拒絕數據?

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

我想在我的Ember錯誤模板中顯示有關被拒絕的模型承諾的信息。 Ember錯誤路由文檔說

錯誤的“原因”(即拋出的異常或承諾拒絕值)將作為其模型傳遞給該錯誤狀態。

所以這里有一些代碼試圖測試這個,使用一個拒絕帶有錯誤消息的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}}

當我嘗試這樣做時,我的錯誤路徑(以及模板)從不接收拒絕對象作為其模型。

這是一個帶有上述代碼的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

這有點令人討厭,但是你傳遞給rejectreason必須是它作為模型正確傳遞給錯誤狀態的對象。

這就是你所需要的:

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

然后,對於您的錯誤模板,您只需引用{{model.error}}

這對我有用,而只是使用字符串作為reason沒有......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM