Im Adapter meiner Anwendung gebe ich Fehlercodes basierend auf Ajax-Fehlern zurück. Ich behandle diese in der Fehlermethode der Anwendungsroute. Das funktioniert super, wenn ich über link-to auf eine Route zugreife. Wenn ich jedoch eine Route aktualisiere oder einfach die URL eingib, wird der Fehlerhandler meiner Anwendung nicht aufgerufen. Gibt es einen Ort, an den ich diese Fehlerbehandlung stellen kann, die garantiert jedes Mal ausgeführt wird? Ich möchte wirklich nicht den gleichen Code "if 401, show login" in jede einzelne Route implementieren.Wo kann ich die globale Ajax-Fehlerbehandlung in Ember einfügen?
Routen/application.js:
export default Ember.Route.extend({
actions: {
error: function(reason) {
if (reason === 401) {
alert('401');
this.send('showLogin');
}
},
Adapter/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;
}
});
Edit:
Der obige Code fast für mich gearbeitet. Das Hauptproblem, das ich traf, war dies. Send ('showLogin') wurde beim Aktualisieren oder Treffen der URL nicht abgefangen. Dies zu ändern, zu einem transitionTo funktioniert super:
import Ember from 'ember';
export default Ember.Route.extend(ApplicationRouteMixin, {
actions: {
error: function(reason) {
if (reason === 401) {
this.transitionTo('login');
}
},
...
Ich habe auch dieses Problem und konnte keine globale Lösung finden. Hast du es jemals gelöst? Ich habe eine ähnliche Frage gestellt: http://stackoverflow.com/questions/29926638/ember-handling-401s-revisited-in-2015 – Confused
Ja, ich habe es endlich funktioniert. Siehe die obige Änderung. – Dennis