ここに別の見方があります。ほとんど空のモデルを作成し、フェッチ後にサーバーから属性を追加するのではなく、以下に貼り付けたものを実行できます。上記の例で考えるべきことの 1 つは、モデルを作成してからその ID をサーバーからフェッチしようとして、それが存在しない場合は、それをクリーンアップする必要があるということです。以下のコードは、そのステップを省略します。
myModel = Backbone.Model.extend({
url : function() {
/*
create _ POST /model
read _ GET /model[/id]
update _ PUT /model/id
delete _ DELETE /model/id
*/
return this.id ? '/model/' + this.id : '/model';
},
});
myCollection = Backbone.Collection.extend({
model: myModel,
url: function() {
return '/model';
},
comparator: function(model) {
return model.get("foo");
},
getOrFetch: function(id) {
var model = this.get(id) || this.getByCid(id);
if (model) return model;
var url = this.url() +"/"+ id
return new this.model().fetch({url:url});
}
});
var mc = new myCollection(new myModel({foo:"bar"}));
mc.getOrFetch(1)