Подтвердить что ты не робот

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

Ответ 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)