7

私はbackbone.syncをオーバーライドしたいのですが、私はすでにこれを尋ねましたが、問題は私がそれを完全に取得していないことです。同期機能をオーバーライドする場合は、コードをどこに配置するかを知る必要があります。

こんなモデルに乗せたら

model = Backbone.Model.extend({ sync:"" });

それなら私はそれをどのように呼ぶべきですか?saveメソッドを使用する場合。また、createのmethodMapをPOSTからPUTに変更する必要があります。一時的に私はこれを'create': 'PUT',実際にbackbone.jsファイルを編集することに頼りました(私はそれが良くないことを知っています)。忘れる前にこれも追加する必要があります

sendAuthentication = function (xhr) {
          xhr.setRequestHeader('Authorization', auth)
}; 

サーバーに認証があるため、beforeSendパラメーターとして。もう一度どこでやればいいですか?どこに行ってコードを置くべきですか?私のモデルでは?私のコレクションに?または私の見解では?何か助けはありますか?ありがとうございました。

アップデート

また、コレクションの同期を上書きできますか?つまり、私はこのようなものを持つことができますか?

collection = Backbone.Collection.extend({ sync:""});
4

1 に答える 1

20

Backboneフレームワークの背後にある戦略は、編集が簡単で、あらゆるニーズに柔軟に対応できるようにすることです。したがって、ソースコードを調べると、Backbone.syncを呼び出すすべてのメソッドが実際に最初に「this.sync」を呼び出すことがわかります。

バックボーンマニュアルからあなたは読むことができます:

同期関数は、Backbone.syncとしてグローバルにオーバーライドすることも、Backboneコレクションまたは個々のモデルに同期関数を追加することでより詳細なレベルでオーバーライドすることもできます。

したがって、2つのオプションがあります

オプション1-グローバルBackbone.sync関数の置き換え

グローバルBackbone.syncをオーバーライドする場合は、コードをグローバルアプリケーションファイルに配置する必要があります(実際には必要な場所に配置しますが、期待どおりに機能するには、最初のjavascriptの読み込み時に評価(実行)する必要があります)。

// Anywhere you want

Backbone.sync = function(method, collection, options) {
        console.log(method, collection options)
}

これはBackbone.syncをオーバーライドし、実際には、collection.fetch、save、deleteなどを呼び出すたびに呼び出されるものをコンソールに表示します。

ここにはデフォルトのメソッドマップはありません。実際、引数以外には何もありません。

  • メソッド-文字列です-'読み取り'、'作成'、'削除'、'更新'
  • コレクション-メソッドを呼び出すコレクションインスタンスです
  • オプション-いくつかの成功、エラー関数があり、保存する場合としない場合があります。

バックボーンのソースコードを読みながら、ブラウザでこれをデバッグすると、非常に理解しやすくなります。

オプション2-モデル/コレクションの同期方法に追加する

これは、特に定義したものを除いて、他のすべてのモデル/コレクションにデフォルトのBackbone.syncメソッドを使用する場合に使用されます。

mySocketModel = Backbone.Model.extend({ 
     sync : function(method, collection, options) {
            console.log('socket collection '+this.name+' sync called');
     }
});

Partners = new mySocketModel({ name : 'partners' });
Users = new mySocketModel({ name : 'users' });
Log = new Backbone.Collection;

したがって、Partners.fetch()またはUsers.fetch()を呼び出すと、Backbone.syncは呼び出されなくなりますが、Log.fetch()メソッドは呼び出されます。

于 2012-04-10T11:47:03.830 に答える