Backbone model.save()正在发送PUT而不是POST
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Backbone model.save()正在发送PUT而不是POST相关的知识,希望对你有一定的参考价值。
我用这个叫保存:
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_",
答案
对于新条目,甚至不应存在ID。问题在于您未显示的部分 - 在您实例化的部分中,创建并填充模型。
以下是the Backbone documentation的引用:
如果该模型还没有
id
,则认为它是新的。
从您的代码中可以清楚地看出,您正在分配一个id属性。你的后端应该这样做。因为你是在客户端上做的,所以骨干假设它不是新的,并使用PUT
另一答案
上面的答案是正确的,因为如果model
你是.save
'ing有id
属性骨干将做PUT
而不是POST
。
只需将type: 'POST'
添加到保存块,就可以覆盖此行为:
var fooModel = new Backbone.Model({ id: 1});
fooModel.save(null, {
type: 'POST'
});
另一答案
您可以在默认值中指定ID,只需确保将其设置为null
(isNew将设置为true)。
在你的情况下它一定是
LineNo_: null
以上是关于Backbone model.save()正在发送PUT而不是POST的主要内容,如果未能解决你的问题,请参考以下文章
通过 Model.save() 更新时触发 Mongoose 预保存挂钩