在我的应用程序的适配器中,我根据ajax错误返回错误代码。我在应用程序路径的错误方法中处理这些问题。如果我通过link-to访问路由,这非常有用。但是如果我刷新路线或只输入URL,我的应用程序的错误处理程序就不会被调用。有没有一个地方我可以把这个错误处理保证每次运行?我真的不想实现同样的#34;如果是401,请登录"每条路线都有代码。
路由/ application.js中:
export default Ember.Route.extend({
actions: {
error: function(reason) {
if (reason === 401) {
alert('401');
this.send('showLogin');
}
},
适配器/ application.js中:
import DS from 'ember-data';
export default DS.ActiveModelAdapter.extend({
'namespace': '',
ajaxError: function(jqXHR) {
var error = this._super(jqXHR);
if (jqXHR && jqXHR.status === 401) {
return 401;
}
return error;
}
});
修改
以上代码几乎对我有用。我遇到的主要问题是在刷新或点击网址时没有抓住这个(' showLogin')。将此更改为转换可以很好地使用:
import Ember from 'ember';
export default Ember.Route.extend(ApplicationRouteMixin, {
actions: {
error: function(reason) {
if (reason === 401) {
this.transitionTo('login');
}
},
...
答案 0 :(得分:1)
您可以创建一个应用程序适配器,然后从中扩展每个适配器,并使用isInvalid函数。
//app/adapters/application.js
import DS from 'ember-data';
import Ember from 'ember';
export default DS.JSONAPIAdapter.extend({
isInvalid(status, headers, payload){
if (status===401) {}
},
});
//app/adapters/anotherAdapter.js
import AppAdapter from 'yourapp/adapters/application';
export default AppAdapter.extend({
});
答案 1 :(得分:0)
如果您正在使用RSVP承诺,那么
Ember.RSVP.on('error', function(error) {
// ...
});
或者如果您使用普通的jQuery xhr
$(document).ajaxError(function(evt, jqXHR) {
// ...
});