1

似乎当我在backbone.js 集合上调用get 时,它通过cookie 传递id,而不是平静地传递到我的GET 方法中。在请求标头中,它的出现是这样的:

饼干:posts=ag5kZXZ-c29jcmVuY2h1c3IOCxIIUG9zdExpc3QYAQw;dev_appserver_login="test100@example.com:False:114323764255192059842"

这就是我所拥有的:

接听电话:

postCollection.get(id)

和get方法:

def get(self, id):

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

4

2 回答 2

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)不应该向后端发出请求。

于 2012-04-26T21:08:22.317 回答
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)
于 2012-04-26T22:11:01.000 回答