バックグラウンド:
バックボーンモデルには、サーバーへの呼び出しが失敗するたびに呼び出されるフォールバックエラーハンドラーを登録するオプションがあり、特定のハンドラーは提供されません。
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ではなくBackbone.Model.prototypeに登録されていることでした。したがって、明らかにこれは良い解決策ではありません。
また、 Backbone.Modelを拡張し、デフォルトのハンドラーを登録するMyModelを定義することも考えました。アプリケーション内の他のすべてのモデルは、Backbone.Modelを直接拡張するのではなく、MyModelを拡張します。ただし、既存のコードを変更せずにシームレスにこれを作成し、すべての開発者にBackbone.ModelではなくMyModelを拡張するように指示しています。
誰かがこの問題の解決策を持っていますか?