Backbone model.save()正在发送PUT而不是POST

时间:2012-11-14 17:56:14

标签: javascript http backbone.js

我用这个叫保存:

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.model的输出的ID为0.(this.model.id也是0)

我的网址是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_",

3 个答案:

答案 0 :(得分:27)

新条目甚至不应存在ID。 问题在于您未显示的部分 - 在您实例化的部分中,创建并填充模型。

以下是the Backbone documentation的引用:

  

如果模型还没有id,则认为它是新的。

从您的代码中可以清楚地看出,您正在分配一个id属性。 你的后端应该这样做。 而且由于您是在客户端上进行的,因此骨干网认为它不是新的,并使用PUT

答案 1 :(得分:19)

以上答案是正确的,如果model .save id具有PUT属性主干,则会POST而不是type: 'POST' {1}}。

只需将var fooModel = new Backbone.Model({ id: 1}); fooModel.save(null, { type: 'POST' }); 添加到保存区块即可覆盖此行为:

{{1}}

答案 2 :(得分:3)

您可以在默认值中指定ID,只需确保将其设置为null(isNew将设置为true)。

在你的情况下,它必须是

LineNo_: null