私はBackbone.jsを試していますが、私がしようとしていることの1つはリモートAPIを呼び出すことですので、Backbone.syncをオーバーライドできるようにする必要があります ドキュメント 。
ドキュメント自体にはそれを行う方法の例はありません。また、バックボーンのグーグルグループはないようです...これを行うための例を指摘できますか?
Backbone.sync
をlocalstorageの代替で上書きするこの注釈付きソースの例を見てください
基本的に、Backbone.syncは4つの引数を取る関数である必要があります。
Backbone.sync = function(method, model, options) { };
method
が成功したかどうかに応じて、options.success
またはoptions.error
を起動する必要があります。メソッドの形式は次のとおりです。
"create"
:サーバーでモデルを作成することが期待されます"read"
:サーバーからこのモデルを読み取って返すことが期待されます"update"
:サーバー上のモデルを引数で更新することが期待されます"delete"
:サーバーからモデルを削除することが期待されています。これらの4つのメソッドを実装し、"server"
に必要なものを定義する必要があります
もちろん、これらはBackbone.sync
mustが実装するものだけです。より多くのmethods
を実装でき、success
により多くのパラメータを戻すことができますが、これを行わないことが最善です。
Backbone.sync
が現在行っているのと同じことを確認して、実装ではなくインターフェースへのプログラミングを行うのが最善です。たとえば、localStorageのように変更したBackbone.sync
を切り替えたい場合は、拡張したBackbone.syncに合わせて自分で拡張する必要はありません。
[編集]
また、sync
の複数の実装を使用できることに注意してください。 Backbone.sync
へのすべての参照は実際には(this.sync || Backbone.sync)
であるため、次のような操作を行うだけです。
var MyModel = Backbone.Model.extend({
...
"sync": myOwnSpecificSync,
...
});
Backbone.sync
は、モデルにsync
メソッドが特に設定されていない限り、すべてのモデルが使用するデフォルトのグローバルなものです。
私はこの答えが少し遅すぎることを知っており、@ Raynosからの答えは素晴らしいですが、私は少し違ったやり方をしました、そしてそれはあなたやBackboneで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);
}