【问题标题】:Backbone model.save() is sending PUT instead of POSTBackbone model.save() 发送的是 PUT 而不是 POST
【发布时间】:2012-11-14 17:56:14
【问题描述】:

我用这个调用保存:

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_",

【问题讨论】:

    标签: javascript http backbone.js


    【解决方案1】:

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

    这是来自the Backbone documentation的引用:

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

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

    【讨论】:

    • 我已对显示模型的帖子进行了编辑。我应该将 LineNo_ 更改为 0 以外的值吗?
    • @Rail24 如果可以的话,完全删除它。 Backbone 对照 null 检查 id 以确定它是否是新的。见documentcloud.github.com/backbone/docs/backbone.html#section-63
    • 我将 LineNo_ 更改为默认为 null,它解决了我的问题!谢谢toninoj!
    • 不客气。另外,如果它解决了您的问题,请接受答案。
    • 计时器<_>
    【解决方案2】:

    以上答案是正确的,因为如果model 你是.save'ing 具有id 属性主干将执行PUT 而不是POST

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

    var fooModel = new Backbone.Model({ id: 1});
    
    fooModel.save(null, {
      type: 'POST'
    });
    

    【讨论】:

    【解决方案3】:

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

    在你的情况下它必须是

    LineNo_: null
    

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 2016-06-14
      • 2015-07-27
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      相关资源
      最近更新 更多