sync() の create でデータの id を指定できなかったという話です。
Backbone.sync()
Backbone.js では sync() 関数を使ってブラウザ上のデータと
サーバ上のデータベースを ajax によって同期させることができます。
モデルの中で urlRoot を指定しておけば、
それを基準にした URL へリクエストが投げられます。
例えばブラウザ上で作成しているゲームをサーバへ同期させるために、
以下のように指定したとします。
/** * ゲームモデル */ var Game = Backbone.Model.extend({ urlRoot: '/sync/game', defaults: { name: '', description: '', thumbnail: '', firstScene: null, sceneList: null }, initialize: function() { this.set('sceneList', new SceneList()); } });
そして sync() 関数を使ってサーバ上へデータを送ります。
この時、引数に create/read/update/delete のいずれかをセット出来ます。(いわゆるCRUD)
ここで指定した操作に合わせて、HTTP リクエストのメソッドが変わります。
create -> POST
update -> PUT
read -> GET
delete -> DELETE
このとき、以下のようにリクエスト URL が決定します。
create -> /sync/game/
update -> /sync/game/id
read -> /sync/game[/id]
delete -> /sync/game/id
update や delete ではモデルの id が自動的に URL へ付加されます。
サーバ側でこの id に対応するデータを削除すればOKです。
create に id がない
create ではまだデータベース上に存在しないデータを追加するので、
id はサーバ側で付けるということになっているようです。
ブラウザ上で新しいモデルを作成した時に、
自動的に付加される cid をデータベース上の idとして使おうと思っていたのですが、
create では id を指定できないのでサーバ側で付けるように変更する必要がありそうです。
クライアント id は複数のクライアント間で被ってしまう可能性があるから、
サーバ側で id を付けるようになっているんだと思います。
0 件のコメント:
コメントを投稿