Existe-t-il un moyen de lier un gestionnaire d'erreurs pour les demandes ajax effectué par backbone.js?
Ma situation: je peux obtenir 401 (non autorisé) à tout moment, je dois donc afficher le popup de connexion.
Existe-t-il un moyen de lier un gestionnaire d'erreurs pour les demandes ajax effectué par backbone.js?
Ma situation: je peux obtenir 401 (non autorisé) à tout moment, je dois donc afficher le popup de connexion.
Épine dorsale de la synchronisation du déclenchement d'une "erreur" de l'événement lorsque des erreurs se produisent. Donc, une approche que l'on pourrait prendre est d'étendre l'épine Dorsale du Modèle et des objets de Collection pour ajouter ces add-on des vérifications d'erreur. Il ressemblerait à quelque chose comme ceci:
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({
});
et tu ferais quelque chose de similaire pour l'objet de Collection. Je n'ai pas testé ci-dessus, mais pense que son assez proche. Évidemment, vous choisissez le meilleur des noms de classe. La méthode init permet seulement la sous-classes pour avoir une chance de faire leur propre initialisation.
Utilisez jQuery directement pour cela.
$(document).ajaxError(function (e, xhr, options) {
// do your stuff
});
Vous pouvez faire la même chose pour CSRF dans des rails par exemple (en utilisant ajaxSend).
Vous pouvez en lire plus ici: http://api.jquery.com/jQuery.ajax#advanced-options
Ce que j'ai trouvé est peut-être la "voie la plus correcte" dans Backbone:
var GeneralErrorView = Backbone.View.extend({
events: {
'ajaxError': 'handleAjaxError'
},
handleAjaxError: function (event, request, settings, thrownError) {
//...handling goes here
}
});
this.view = GeneralErrorView({el: document});
Vous pouvez définir n'importe quelle logique de traitement des erreurs sans étendre les modèles ou les collections. Utilisez le gestionnaire interne Backbone.Events et transmettez des messages à d’autres gestionnaires d’erreurs ou quelque chose du genre.
Vous pouvez gérer cela via la méthode jQuery .ajaxSetup. Nous avons une situation identique (application centrale pouvant générer une erreur 401 à tout moment) et nous la traitons en utilisant ajaxSetup de jQuery dans le point d'entrée de notre application:
var appView = new AppView(options);
$.ajaxSetup({
cache: false,
statusCode: {
401: function () {
appView.signIn();
}
}
});
appView.render();
Backbone.history.start({ root: config.rootUrl, pushState: true });
Cette approche permet une gestion globale des erreurs sans qu'il soit nécessaire d'étendre les classes de base Backbone.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.