2011-09-19 8 views
12

コレクション内の個々のモデルの変更を保存する際に問題があります。ロードされたモデル(.reset()コレクションを介して)は、予想されたPUTの代わりに(新しいものと同じように)POSTを発行しています。既存モデルの.save()はPUTの代わりにPOSTを発生させます

ここで私が取っているアプローチです:

APPVIEW

  • はthis.model.childcollection.reset(サーバからのJSON DATA)を経由して、子コレクションをロードしますが、それに

  • は、機能をレンダリングのコレクション内の各項目のための新しいchildviewを作成し、レンダリング:そのイベントの一つでChildView

    • render: function() { 
           var el = this.el; 
           this.model.childcollection.forEach(function(s) { 
           var view = new ChildView({ model: s }); 
           el.append(view.render().el); 
          }); 
          return this; 
      }, 
      

    をそれ基礎となるモデルの一部の値を変更してsaveを呼び出しています:

    this.model.set(
         { 
          ValueA: somevalue, 
          ValueB: somevalue 
         }, 
         { 
          error: function() { 
           console.log("Error saving model"); 
          }, 
          success: function() { 
           console.log("Model change saved"); 
          } 
         }); 
        this.model.save(); 
    

観察:

  • (なし子IDを持つ)POSTが(子IDを持つ)の代わりにPUTで呼ばれ
  • 子要素Idsは

を設定している誰もが言うことができますなぜ私はこれが起こっているかもしれませんか?

答えて

29

バックボーンは、ソースコードにここに示したように、それは、入れたり、ポストべきかどうかを決定するためにモデルの.idプロパティを(属性ではない)を使用:https://github.com/documentcloud/backbone/blob/master/backbone.js#L344-346

既存のモデルを保存するとき、それはポストをやっている場合は、この.idプロパティが正しく読み込まれていないことを意味します。 model.get("id")への呼び出しが正しい結果を返しても、model.idの呼び出しは、新しいモデルではないことを知るために正しい結果を返す必要があります。

あなたは、モデルのid属性がidと呼ばれる、またはそうでない場合は、お使いのモデルにidAttributeを設定してくださいされていることを確認し:

MyModel = Backbone.Model.extend({ 
    idAttribute: "myCustomId" 
}); 
+0

おかげで - 問題となっているように見えます - 「イド'サーバー側モデルのプロパティ名を大文字にしました。それを小文字に変更すると固定されているようです。 – UpTheCreek

+1

また、Backbone.Modelを拡張するときに 'idAttribute'オプションを使用することで、BackboneがIDフィールドを考慮するフィールド名を変更できました。 –

関連する問題