tutorial significado react backbone javascript rest backbone.js

javascript - react - backbone significado



Controlador de error global para solicitudes backbone.js ajax (4)

La sincronización de Backbone desencadena un evento de ''error'' cuando ocurren 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.

¿Hay alguna manera de vincular un controlador de errores para solicitudes ajax que se realiza por backbone.js?

Mi situación: puedo obtener 401 (no autorizado) en cualquier momento, así que tengo que mostrar la ventana emergente de inicio de sesión.


Lo que encontré es posiblemente la "forma más correcta" en Backbone:

var GeneralErrorView = Backbone.View.extend({ events: { ''ajaxError'': ''handleAjaxError'' }, handleAjaxError: function (event, request, settings, thrownError) { //...handling goes here } }); this.view = GeneralErrorView({el: document});

Puede colocar cualquier lógica de manejo de errores sin extender Modelos o Colecciones. Haga uso de backbone.Events manejador interno y transmita mensajes a otros manejadores de errores o algo así.


Puede manejar esto mediante el método jQuery .ajaxSetup. Tenemos una situación idéntica (aplicación de la red troncal que puede recibir un error 401 en cualquier momento) y la manejamos usando jQuery''s ajaxSetup en el punto de entrada de nuestra aplicación:

var appView = new AppView(options); $.ajaxSetup({ cache: false, statusCode: { 401: function () { appView.signIn(); } } }); appView.render(); Backbone.history.start({ root: config.rootUrl, pushState: true });

Este enfoque proporciona un manejo global de errores sin la necesidad de extender las clases base de Backbone.


Usa jQuery directamente para esto.

$(document).ajaxError(function (e, xhr, options) { // do your stuff });

Puede hacer lo mismo para CSRF en rieles, por ejemplo (utilizando ajaxSend).

Puede leer más aquí: http://api.jquery.com/jQuery.ajax#advanced-options