La sincronización de Backbone desencadena un evento de "error" cuando se producen errores. Entonces, un enfoque que podría tomar es extender los objetos Modelo y Colección de Backbone para agregar estas comprobaciones de error de complemento. Se vería algo como esto:
ErrorHandlingModel = Backbone.Model.extend({
initialize: function(attributes, options) {
options || (options = {});
this.bind("error", this.defaultErrorHandler);
this.init && this.init(attributes, options);
},
defaultErrorHandler: function(model, error) {
if (error.status == 401 || error.status == 403) {
// trigger event or route to login here.
}
}
});
OtherModel = ErrorHandlingModel.extend({
});
y harías algo similar para el objeto Collection. No he probado lo anterior, pero creo que es bastante cercano. Obviamente, elegirías mejores nombres de clase. El método init solo permite a las subclases tener la oportunidad de hacer su propia inicialización.
Tenga en cuenta que esta devolución de llamada se ejecutará para todos los errores de JQuery ajax, no solo aquellos relacionados con solicitudes de red troncal. Es posible que haya otras bibliotecas en la página que realizan solicitudes ajax a través de jquery, probablemente no desee la devolución de llamada en esos casos. – cerberos
hm, esa es una forma demasiado global ... – wik
Este enfoque de utilizar la devolución de llamada global ajaxError no funciona con modelos/colecciones Backbone si los métodos fetch, sync, create tienen una devolución de llamada de error proporcionada como opción. –