这是另一种看法。与其创建一个大部分为空的模型,然后在获取后从服务器向其添加属性,不如执行我在下面粘贴的操作。在上面的例子中要考虑的一件事是,如果您创建一个模型,然后尝试从服务器获取该 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)