Nell'adattatore della mia applicazione, restituisco i codici di errore in base agli errori ajax. Sto gestendo questi nel metodo di errore del percorso dell'applicazione. Funziona alla grande se accedo a un percorso tramite link-to. Ma se aggiorno una rotta o semplicemente inserisco l'URL, il gestore degli errori dell'applicazione non viene chiamato. C'è un posto dove posso mettere questa gestione degli errori che sarà garantita per funzionare ogni volta? In realtà non voglio implementare lo stesso codice "se 401, mostra login" in ogni singola rotta.Dove posso inserire la gestione globale degli errori Ajax in Ember?
rotte/application.js:
export default Ember.Route.extend({
actions: {
error: function(reason) {
if (reason === 401) {
alert('401');
this.send('showLogin');
}
},
adattatori/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:
Il codice sopra quasi ha funzionato per me. Il problema principale che ho riscontrato era this.send ('showLogin') che non veniva catturato durante l'aggiornamento o il raggiungimento dell'URL. La modifica di questa ad un transitionTo funziona alla grande:
import Ember from 'ember';
export default Ember.Route.extend(ApplicationRouteMixin, {
actions: {
error: function(reason) {
if (reason === 401) {
this.transitionTo('login');
}
},
...
Ho anche questo problema e non ho potuto trovare una soluzione globale. L'hai mai risolto? Ho postato una domanda simile: http://stackoverflow.com/questions/29926638/ember-handling-401s-revisited-in-2015 – Confused
Sì, finalmente ho funzionato. Vedi la modifica sopra. – Dennis