静静地使用Backbone.Collection.get(id)

时间:2012-04-26 20:18:46

标签: collections backbone.js

似乎在我调用了backbone.js集合时,它通过cookie传递id而不是传递给我的GET方法。在请求标题中它会出现如下:

  

的Cookie:帖= ag5kZXZ-c29jcmVuY2h1c3IOCxIIUG9zdExpc3QYAQw;   dev_appserver_login = “test100@example.com:错误:114323764255192059842”

这就是我所拥有的:

来电:

postCollection.get(id)

和get方法:

def get(self, id):

我想在get方法中使用id,而不是必须使用cookie。

2 个答案:

答案 0 :(得分:5)

完成此任务的最佳方法可能如下所示。

var model = collection.get(id);
// If the model is not present locally..
if (!model) {
  // Add empty model with id.
  model = collection.add([{id: id}]);
  // Populate model attributes from server.
  model.fetch({success: successCallback, error: errorCallback });
}

collection.get(id)不应该向后端发出请求。

答案 1 :(得分: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)