バックボーン コレクションを使用して、サーバーから mongodb コレクションを取得しています。ID は「_id」として保存されるため、idAttribute を使用して「_id」にマップしました。
(function(){
var PlaceModel = Backbone.Model.extend({
idAttribute: "_id",
});
var PlaceCollection = Backbone.Collection.extend({
url: "http://localhost:9090/places",
initialize: function(options){
var that = this;
this.fetch({
success: function(){
console.log("Success!", that.toJSON());
},
error: function(){
console.log("Error");
}
});
}
});
var place = new PlaceCollection({model:PlaceModel});
}());
しかし、後でエントリを削除するときにモデルの「idAttribute」にアクセスしようとすると、「_id」ではなく「id」が返されます。これは、ビューからの this.model.isNew() がすべてに対して「true」を返すことを意味しますサーバーから取得したレコード。したがって、サーバーへのエントリを DELETE することも PUT することもできません。
ただし、(PlaceModel 定義内ではなく) 次のようなプロトタイプを使用して idAttribute を設定すると:
Backbone.Model.prototype.idAttribute = "_id";
次に、idAttribute を '_id' に正しくマップすると、すべてが機能します。何が起こっているのでしょうか?