История:
Базовая модель предоставляет возможность зарегистрировать резервный обработчик ошибок, который будет вызываться каждый раз, когда вызов на сервер выходит из строя, и не предоставляется специальный обработчик.
MyModel = new Backbone.Model.extend({
initialize: function(option) {
this.on("error", this.fallbackErrorHandler);
},
fallbackErrorHandler: function() {
// default behavior in case of an error
},
foo: function() {
this.fetch(); // fallbackErrorHandler will be called
this.fetch({ // the inline error handler will be called
error: function() {
// some specific code for this error
}
});
}
});
Что я хочу сделать:
Я хотел бы, чтобы все базовые модели в моем приложении имели обратный обработчик ошибок. Но - я не хочу явно добавлять обработчик для каждой модели. Я хотел бы определить и зарегистрировать обработчик один раз и применить его к каждой базовой модели в моем приложении. Кроме того, я не хочу менять существующий код, и я не хочу изменять способ определения моделей в приложении.
Что я уже пробовал:
Я добавил инициализатор, который регистрирует обработчик на объекте Backbone.Model.prototype.
App.Marionette.addInitializer(function() {
Backbone.Model.prototype.on("error",function(){
// default behavior in case of an error
});
});
Этот код работал, и мой аварийный обработчик ошибок был вызван. Однако побочным эффектом этого кода было то, что все обработчики ошибок, зарегистрированные в любых базовых моделях в приложении, были зарегистрированы на Backbone.Model.prototype, а не на Backbone.Model. Поэтому, очевидно, это не очень хорошее решение.
Я также подумал об определении MyModel, который расширяет Backbone.Model и регистрирует обработчик по умолчанию. Все остальные модели в моем приложении затем расширят MyModel вместо прямого расширения Backbone.Model. Тем не менее, я пытаюсь сделать это без проблем, не изменяя существующий код, а затем инструктируя всех разработчиков расширять MyModel вместо Backbone.Model.
У кого-нибудь есть решение этой проблемы?