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

Rai*_*l24 20 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);
    }   
});
Run Code Online (Sandbox Code Playgroud)

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_",
Run Code Online (Sandbox Code Playgroud)

ton*_*o.j 27

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

以下是Backbone文档的引用:

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

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

  • 计时器<_ <我将在一分钟内. (2认同)

Lan*_*ane 20

上面的答案是正确的,如果model.save有一个id属性骨干将做一个PUT而不是一个POST.

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

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

fooModel.save(null, {
  type: 'POST'
});
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的帖子,它在类似的情况下帮助了我.我发现(阅读Backbone源代码)你不需要创建模型,保存它然后添加到集合中,你只需要将类型:'POST'传递给集合的create()方法:fooCollection.create ({id:1},{type:'POST'}); (2认同)