Contexte :
Le modèle Backbone offre une option pour enregistrer un gestionnaire d'erreurs de secours qui sera appelé à chaque fois qu'un appel au serveur échoue et qu'aucun gestionnaire spécifique n'est fourni.
MyModel = new Backbone.Model.extend({
initialize: function(option) {
this.on("error", this.fallbackErrorHandler);
},
fallbackErrorHandler: function() {
// comportement par défaut en cas d'erreur
},
foo: function() {
this.fetch(); // fallbackErrorHandler sera appelé
this.fetch({ // le gestionnaire d'erreur en ligne sera appelé
error: function() {
// du code spécifique pour cette erreur
}
});
}
});
Ce que je veux faire :
Je voudrais que tous les modèles backbone de mon application aient un gestionnaire d'erreurs de secours. Mais - je ne veux pas ajouter explicitement le gestionnaire pour chaque modèle. Je voudrais définir et enregistrer le gestionnaire une fois et qu'il soit appliqué à chaque modèle backbone de mon application. De plus, je ne veux pas changer le code existant et je ne veux pas changer la façon dont les développeurs définissent les modèles dans mon application.
Ce que j'ai déjà essayé :
J'ai ajouté un initialiseur qui enregistre un gestionnaire sur l'objet Backbone.Model.prototype.
App.Marionette.addInitializer(function() {
Backbone.Model.prototype.on("error",function(){
// comportement par défaut en cas d'erreur
});
});
Ce code a fonctionné et mon gestionnaire d'erreurs de secours a été appelé. Cependant, l'effet secondaire de ce code était que tous les gestionnaires d'erreurs enregistrés dans n'importe quel modèle backbone de l'application étaient enregistrés sur le Backbone.Model.prototype au lieu de sur le Backbone.Model. Donc évidemment ce n'est pas une bonne solution.
J'ai également pensé à définir MyModel qui étend le Backbone.Model et enregistre le gestionnaire par défaut. Tous les autres modèles de mon application étendront alors MyModel au lieu d'étendre directement Backbone.Model. Cependant, j'essaie de le faire de manière transparente sans avoir à changer le code existant et ensuite d'instruire tous les développeurs à étendre MyModel au lieu de Backbone.Model.
Est-ce que quelqu'un a une solution à ce problème ?