我想在我的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上面的代码。
答案 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}}
没有...