3

Model.save()Backbone のネイティブメソッドに、成功とエラーを記録するカスタム ロギング メソッドを追加したいと考えています。モデルごとに、次のように呼び出すことができることを知っています。

myModel.save().success(function() {
    // do something cool
});

しかし、さまざまなモデルの保存イベントへのすべての呼び出しを調整するのではなく、任意のモデルで保存イベントを単純にリッスンしたいと考えています。私が避けたいと思う 1 つの方法は、実際にBackbone.Model.prototype.saveメソッドを変更することです (ただし、誰かがこれを行うエレガントな方法を持っている場合、私はそれを受け入れます)。

そのようなイベントリスナーを作成する方法について何か考えはありますか?

4

3 に答える 3

6

すべてのモデル/コレクションがデフォルトの Backbone.sync メソッドを使用している場合、新しい同期メソッドを作成してログを記録できます。

   var originalSync = Backbone.sync;
   var loggingSync = function(method, model, options) {
         // call original Backbone.sync
         var promise = originalSync(method, model, options);
         promise.done(function() {
            // if method is 'update' or 'create', log success
         });
         promise.fail(function() {
            // if method is 'update' or 'create', log failure
         });
         return promise;
      };
   Backbone.sync = loggingSync;

デフォルトでは、Model.sync と Collection.sync は両方とも Backbone.sync にプロキシ スルーするため、デフォルトの同期を使用している場合は、この変更で処理されます。

于 2013-01-25T23:44:10.237 に答える
2
var GlobalModel = Backbone.Model.extend({
save: function() {

}
});

myModel = GlobalModel.extend({
//..your model
})
于 2013-01-25T21:29:29.243 に答える
1

AJAX の成功/失敗をログに記録したいだけなら、Backbone をまったく使用しない、はるかに優れた方法があります$.ajaxComplete

jQuery には、関数の引数を取り、呼び出しが完了する (失敗または成功する)ajaxCompleteたびにその関数を実行する、この素晴らしい関数が呼び出されます。$.ajaxこのメソッド (つまり、「イベント ハンドラーを ajaxComplete 疑似イベントにバインドする」) を使用すると、次のことができます。

A) バックボーンの内部をいじる必要はありません

B) すべての AJAX リクエストをキャッチすることが保証されています (バックボーンなしで作成されたものも含む)。

C)このロギングコードを残りのコードから完全に分離しておく

おそらく私が見逃している他のいくつかの利点がありますが、あなたはその考えを理解しています.

一方、saveAJAX リクエストだけでなく、本当に気にかけているのであれば、$.ajaxComplete保存されていないものを無視するために、その内部でフィルタリングを使用して実行することもできます。ただし、独自のモデル基本クラスを作成することもできます (@salexch が提案したように)。さらに悪いことに、バックボーンの内部をいじることもできます。Backbone.Model.prototype.saveorを置き換えることによってBackbone.sync(@Paul Hoeneckeが提案したように)、将来のバックボーンのアップグレードまたは使用したいサードパーティのバックボーンライブラリで問題が発生する可能性があります。

興味がある場合は、次のドキュメント ページを参照してくださいajaxComplete: http://api.jquery.com/ajaxComplete/

ああ、失敗/成功/リクエストの開始/などのみを対象とする、同様の名前の$.ajaxSomethingメソッド (例: )もいくつかあります。ajaxError

于 2013-01-26T01:49:33.747 に答える