Я создал модель в магистрали:
var app={};
app.pilot_id = $("#user_id").val();
app.Pilot = Backbone.Model.extend({
url: POST_SUBMITTER.root + 'pilotdata/v1/pilot/',
sync: function(method, model, options) {
return Backbone.sync(method, this, $.extend(options, {
beforeSend: function (xhr) {
xhr.setRequestHeader ('X-WP-NONCE', POST_SUBMITTER.nonce);
}
}))
},
defaults : {
lastName: 'Doe',
firstName: 'John'
},
initialize : function() {
this.fetch({ data: ({id: app.pilot_id})});
}
});
app.pilot = new app.Pilot();
{после извлечения lastName будет 'Smith', а firstName будет 'Sue'
, и я создаю представление с обратной формой. js
app.PilotForm = Backform.Form.extend({
el: $("#personalInformation"),
events: {
"submit": function(e) {
e.preventDefault();this.model.save( {patch: true})
.done(function(req, status, err) {
alert( status + ', ' + err);
console.log(status, err);
})
.fail(function(req, status, err) {
alert( status + ', ' + err);
});
return false;
}
},
fields: [
{name: "id", label: "Id", control: "uneditable-input"},
{name: "firstName", label: "First Name", control: "input"},
{name: "lastName", label: "Last Name", control: "input"},
{control: "button", label: "Save to server"}
],});
new app.PilotForm({model: app.pilot}).render();
Это будет многостраничная форма. И только несколько полей нужно будет обновлять каждый раз. Поэтому я хотел бы обновить сервер с помощью «PATCH». Однако ВСЕ поля, которые были предварительно заполнены из выборки, помечаются как измененные. Поэтому все отправляется в запросе PATCH.
После создания нового приложения. PilotForm ... Я добавил
app.pilot.attributes={};
Это работает; Теперь, когда я меняю поле, в запросе PATCH отправляется только это поле. Тем не менее, документация предполагает, что плохо связываться напрямую с атрибутами ha sh. Есть лучший способ сделать это?