Backbone model.save() отправляет PUT вместо POST
Я вызываю save, используя это:
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
имеет идентификатор 0. (this.mod.id тоже 0)
Мой url 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_",
Ответы
Ответ 1
ID не должен существовать даже для новой записи.
Проблема заключается в той части, которую вы не показывали - в той части, где вы создаете экземпляр, создаете и заполняете модель.
Вот цитата из документация по Backbone:
Если модель еще не имеет id
, она считается новой.
Из вашего кода видно, что вы назначаете атрибут id.
Ваш бэкэнд должен это делать.
И поскольку вы делаете это на клиенте, позвоночник предполагает, что он не новый и использует PUT
Ответ 2
Вышеуказанные ответы верны в том, что если model
вы .save
'ing имеет атрибут id
, он будет PUT
, а не POST
.
Это поведение можно переопределить простым добавлением type: 'POST'
к вашему блоку сохранения:
var fooModel = new Backbone.Model({ id: 1});
fooModel.save(null, {
type: 'POST'
});
Ответ 3
Вы можете указать идентификатор по умолчанию, просто убедитесь, что он установлен в значение null (isNew будет установлено значение true)