如何在 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
这有点烦人,但是您传递给 reject
的 reason
必须是一个对象才能作为其模型正确传递给错误状态。
这就是您所需要的:
App.FailRoute = Ember.Route.extend({
model() {
return new Ember.RSVP.Promise((_, reject) => {
reject({error: 'This is an error message'});
});
}
});
然后对于您的错误模板,您只需参考 {{model.error}}
。
这对我有用,而仅使用字符串作为 reason
并没有...
我想在我的 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
这有点烦人,但是您传递给 reject
的 reason
必须是一个对象才能作为其模型正确传递给错误状态。
这就是您所需要的:
App.FailRoute = Ember.Route.extend({
model() {
return new Ember.RSVP.Promise((_, reject) => {
reject({error: 'This is an error message'});
});
}
});
然后对于您的错误模板,您只需参考 {{model.error}}
。
这对我有用,而仅使用字符串作为 reason
并没有...