Backbone.syncは、サーバへmodelの保存や読込みを試みるたびにBackboneが呼び出す関数です。
初期設定では、RESTful JSON リクエストを行うために(jQueryもしくはZeptoの) .ajax を使用します。そして、レスポンスはjqXHRが返ります。
WebSockets、 XML transport、 Local Storageなどの異なる永続化の方法を利用する場合はこの関数を置き換えることができます。
Backbone.sync のメソッドシグネイチャは sync(method, model, [options]) です。
"create", "read", "update", or "delete")Backbone.sync の既定の動作。
modelを保存する場合、modelの属性値はJSONにシリアライズされてHTTPボディに渡され、コンテントタイプに application/json を指定して送信します。
そしてサーバによって変更され、クライアントにて更新が必要なmodelの属性値は、JSONでレスポンスが返ります。
コレクションの "read" (#Collection#fetch) を使用した場合、複数のmodelオブジェクトが配列となってレスポンスが返されます。
この sync メソッドは、Backboneのコレクションや個々のモデルに sync 関数を追加することによって、
Backbone.sync と同じグローバルレベルやもっと細かい粒度でオーバーライドできます。
既定の sync が取り扱うCRUDをRESTに置き換えるマップ。
/collection/collection[/id]/collection/id/collection/id例として、Backbone から呼び出す "update" へのRailsの応答ハンドラはこのようになります。
(実際のコードでは update_attributes を盲目的に利用することはなく、常に変更できる属性をホワイトリスト化してください。)
def update
account = Account.find params[:id]
account.update_attributes params
render :json => account
end
Railsと統合するためのもうひとつのヒントは、モデルからの to_jsonは 呼び出しについて
既定の名前空間を無効に設定することです。 ActiveRecord::Base.include_root_in_json = false
Backbone.emulateHTTP = true 原文もしBackbone既定のREST/HTTPアプローチをサポートしていないレガシーなWebサーバ上で作業したい場合、Backbone.emulateHTTPをオンにしてください。
この関数にtrueを設定して PUT や DELETE リクエストを要求した場合、X-HTTP-Method-Override HTTPリクエストヘッダーを POST に偽装してリクエストを要求します。
また、emulateJSON メソッドをtrueにした場合、この設定は _method パラメータとして渡されます。
Backbone.emulateHTTP = true;
model.save(); // "_method=PUT" パラメータと一緒に "/collection/id" へ POSTする。
Backbone.emulateJSON = true 原文もし application/json エンコードを取り扱えないレガシーなWebサーバ上で作業している場合、
Backbone.emulateJSON = true; とすることで、JSONは model パラメータとしてシリアライズされ
HTMLフォームと同じようにMINEタイプを application/x-www-form-urlencoded としてリクエストを要求します。