私はBackbone.jsを試していますが、試みていることの1つはリモートAPIを呼び出すことです。そのため、ドキュメントを理解しているので、Backbone.syncをオーバーライドできる必要があります。
ドキュメント自体にその方法の例はありません。また、Backboneのgoogleグループはないようです...誰かがこれを行う例を指摘できますか?
私はBackbone.jsを試していますが、試みていることの1つはリモートAPIを呼び出すことです。そのため、ドキュメントを理解しているので、Backbone.syncをオーバーライドできる必要があります。
ドキュメント自体にその方法の例はありません。また、Backboneのgoogleグループはないようです...誰かがこれを行う例を指摘できますか?
回答:
この注釈付きソースの例を見てください。これらBackbone.sync
はlocalstorageの代替で上書きされています。
基本的に、Backbone.syncは4つの引数を取る関数である必要があります。
Backbone.sync = function(method, model, options) { };
あなたは火のいずれかに必要があるoptions.success
かoptions.error
かどうかに応じてmethod
成功しました。メソッドの形式は次のとおりです。
"create"
:サーバー上にモデルを作成することが期待されています"read"
:サーバーからこのモデルを読み取って返すことが期待されています"update"
:サーバー上のモデルを引数で更新することが期待されています"delete"
:サーバーからモデルを削除する必要があります。これらの4つのメソッドを実装し、必要なものを定義する必要があります "server"
もちろん、これらは実装するBackbone.sync
必要があるものだけです。より多くmethods
を実装し、より多くのパラメーターを渡すことができますがsuccess
、これを行わないことが最善です。
Backbone.sync
現在と同じように動作することを確認して、実装ではなくインターフェイスへのプログラミングを行うことをお勧めします。変更さBackbone.sync
れたlocalStorageを変更する場合は、拡張されたBackbone.syncと一致するように自分で拡張する必要はありません。
[編集]
また、の複数の実装を使用できることに注意してくださいsync
。へのすべての参照Backbone.sync
は実際に行われる(this.sync || Backbone.sync)
ため、次のようなことを行う必要があります。
var MyModel = Backbone.Model.extend({
...
"sync": myOwnSpecificSync,
...
});
Backbone.sync
モデルにsync
メソッドが明確に設定されていない限り、すべてのモデルが使用するデフォルトのグローバルグローバルです。
(this.sync || Backbone.sync)
編集を参照してください。さらなるヒントは、バックボーンの注釈付きソースを読むことです。すべて揃っています!
sync
します。コードの任意の場所(通常は上書きされたものsync
)から「デフォルト」を呼び出したい場合は、を実行するだけですBackbone.sync.call(this, method, this, options)
。
私はこの答えが少し遅すぎて、@ Raynosからの答えが素晴らしいことを知っていますが、少し違う方法でやったので、あなたや他の人がバックボーンでAPIを使用しようとする場合に役立つでしょう。
代わりにBackbone.syncをオーバーライドする、私はオーバーライドBackbone.ajaxを AJAX要求が行われる場合、それはだから、。
次に例を示します。
// Set the default implementation of `Backbone.ajax` to proxy through to `$`.
Backbone.ajax = function() {
var args = Array.prototype.slice.call(arguments, 0);
// Here, I add the OAuth token (or any other token)
// But before, I check that data exists, if not I add it
if (args[0]['data'] === undefined) {
args[0]['data'] = {};
}
args[0]['data']['token'] = 'any_api_token_here';
return Backbone.$.ajax.apply(Backbone.$, args);
};
sync
特定の属性のみを同期する必要がある場合は、通常、バックボーンのメソッドをオーバーライドする必要があります。典型的な実装は次のようになります。
sync: function (method, model, options) {
options.data = _.pick(this.attributes, 'foo', 'bar', 'baz');
return Backbone.sync.call(this, method, model, options);
}
Backbone.sync.apply(this, arguments);
どうですか?たとえば、オーバーライドされたバージョンので「options」引数を省略した場合、それは少し柔軟になりますsync
。
Backbone.model.save(attributes, {patch: true})
して、部分更新を今すぐ実行できます