在我的应用程序的适配器中,我将根据ajax错误返回错误代码.我正在应用程序路由的错误方法中处理这些.如果我通过link-to访问路由,这非常有用.但是,如果我刷新路径或只输入URL,则不会调用我的应用程序的错误处理程序.有没有一个地方我可以把这个错误处理保证每次运行?我真的不想在每一条路线中实现相同的“if 401,show login”代码.
路线/ 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; } });
编辑:
上面的代码几乎对我有用.我点击的主要问题是在刷新或点击URL时没有捕到this.send(‘showLogin’).将此更改为转换可以很好地工作:
import Ember from 'ember'; export default Ember.Route.extend(ApplicationRouteMixin,{ actions: { error: function(reason) { if (reason === 401) { this.transitionTo('login'); } },...
解决方法
您可以创建一个应用程序适配器,然后从中扩展每个适配器,并使用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({ });