1

backbone.js コレクションで get を呼び出すと、GET メソッドに安らかに渡されるのではなく、Cookie によって ID が渡されるようです。リクエスト ヘッダーでは、次のようになります。

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

これは私が持っているものです:

get 呼び出し:

postCollection.get(id)

および get メソッド:

def get(self, id):

Cookie を使用するのではなく、get メソッドで ID を使用したいと考えています。

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

ここに別の見方があります。ほとんど空のモデルを作成し、フェッチ後にサーバーから属性を追加するのではなく、以下に貼り付けたものを実行できます。上記の例で考えるべきことの 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 に答える