2012-11-14 9 views
19

送信しています。しかしthis.modelの出力はバックボーンmodel.saveは()私はこれを使用してsaveを呼び出すPUTの代わりに、POST

私のurlはurl: ROOTAREA + "/Expenses/Entry/",

更新が正常に動作し、期待通りにPUTを使用している(this.model.idは同様に0である)、0のIDを持っています。

編集:ここに私のモデルの一部だ:

defaults: function() { 
     return { 
      DocumentDate: "", 
      JobNo_: "", 
      PhaseCode: "", 
      WorkTypeCode: "", 
      Description: "", 
      Quantity: 0, 
      UnitCost: 0, 
      ExpenseCurrencyCode: "", 
      ReimbursementCurrencyCode: "", 
      UnitofMeasureCode: "DIEM", 
      LineNo_: 0 
     }; 
    }, 
    idAttribute: "LineNo_", 

答えて

27

IDでも新しいエントリのために存在してはなりません。 問題は、モデルをインスタンス化し、作成してデータを取り込む部分に表示されなかった部分にあります。ここで

the Backbone documentationからの引用です:モデルはまだidを持っていない場合は

、新しいと考えられています。

id属性を割り当てることは、コードから明らかです。 あなたのバックエンドはそうしているはずです。 そして、あなたがクライアント上でそれをやっているから、バックボーンは、それは新しいものではないことを前提とし、あなたはそれがnullに設定されています確認して、デフォルトでIDを指定することができPUT

+0

私はモデルを示す私のポストに編集を加えました。 LineNo_を0以外に変更する必要がありますか? – Rail24

+0

@ Rail24可能であれば、完全に取り外してください。バックボーンは、IDが新しいかどうかを判断するためにIDとnullを比較します。 http://documentcloud.github.com/backbone/docs/backbone.html#section-63 – nikoshr

+0

を参照してください。LineNo_をnullにデフォルトに変更し、問題を解決しました。ありがとうtoninoj! – Rail24

2

を使用しています(isNewがtrueに設定されます)

19

上記の回答は、model.saveがあり、id属性バックボーンがある場合、POSTではなくPUTとなります。

この動作は、ブロックを保存しますにtype: 'POST'を追加するだけで無効にすることができます。

var fooModel = new Backbone.Model({ id: 1}); 

fooModel.save(null, { 
    type: 'POST' 
}); 
+2

あなたの記事のおかげで、それは私にも同様の場合に役立ちました。 モデルを作成して保存してコレクションに追加する必要がないことを(Backboneソースを読んで)知っていました。タイプ: 'POST'をコレクションのcreate()メソッドに渡すだけです: fooCollection.create({id:1}、{type: 'POST'}); – Shu

+0

他のソリューションについては、[PUTの代わりにPOSTを使用するBackbone.syncのアップデートを強制するための最も醜い方法は何ですか?](http://stackoverflow.com/q/8527694/1218980) –

関連する問題