Сброс магистрали. js атрибутов хэша - PullRequest
0 голосов
/ 29 февраля 2020

Я создал модель в магистрали:

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. Есть лучший способ сделать это?

1 Ответ

0 голосов
/ 02 марта 2020

Вы можете использовать метод модели, такой как changedAttributes, previousAttributes et c, чтобы найти информацию, которую вы хотите отправить на сервер, а затем использовать эту patch опцию model.save :

Если вместо этого вы хотите, чтобы только измененные атрибуты отправлялись на сервер, позвоните model.save(attrs, {patch: true}). Вы получите запрос HTTP PATCH на сервер только с переданными атрибутами.

Где attrs - это то, чем вы хотите быть полезными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...