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()返回错误。但输出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_",
4

3 回答 3

28

新条目的 ID 甚至不应该存在。问题在于您没有显示的部分 - 在您实例化、创建和填充模型的部分。

这是来自Backbone 文档的引用:

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

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

于 2012-11-14T18:00:51.540 回答
20

上面的答案是正确的,因为如果model.save有一个id属性主干将做 aPUT而不是 a POST

type: 'POST'只需添加到您的保存块即可覆盖此行为:

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

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

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

在你的情况下,它必须是

LineNo_: null
于 2013-10-01T08:09:45.277 回答