21

これを使用して保存を呼び出します:

console.log(this.model.isNew());
console.log(this.model);

this.model.save({}, {
    success: function (model, response, options) {
        console.log(response);
    },
    error: function (model, xhr, options) {
        console.log(xhr.result.Errors);
    }   
});

isNew()false を返します。しかし、出力のthis.modelID は 0 です (this.model.id も 0 です)。

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

更新は正常に機能し、期待どおりに PUT を使用します。

編集:ここに私のモデルの一部があります:

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

3 に答える 3

28

新しいエントリの ID さえ存在してはなりません。問題は、表示されなかった部分にあります-モデルをインスタンス化、作成、および設定する部分です。

バックボーンのドキュメントからの引用は次のとおりです。

モデルにまだ が付いていない場合は、id新品と見なされます。

id 属性を割り当てていることは、コードから明らかです。あなたのバックエンドはそれをしているはずです。そして、あなたはクライアントでそれをやっているので、バックボーンはそれが新しいものではないと推測し、使用しますPUT

于 2012-11-14T18:00:51.540 に答える
20

上記の答えは、modelあなたが属性バックボーンを.save持っている場合、ではなくを実行するという点で正しいです。idPUTPOST

この動作はtype: 'POST'、保存ブロックに追加するだけでオーバーライドできます。

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

fooModel.save(null, {
  type: 'POST'
});
于 2014-07-23T16:27:39.683 に答える
3

ID はデフォルトで指定できますが、ID が に設定されていることを確認してnullください (isNew は true に設定されます)。

あなたの場合、そうでなければなりません

LineNo_: null
于 2013-10-01T08:09:45.277 に答える