Reset boundary.js属性哈希

问题描述 投票:0回答:1

我已经在主干中创建了一个模型:

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”

并且我使用backform.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请求中发送。

创建新的app.PilotForm ...之后,我已添加

app.pilot.attributes={};  

这确实有效;现在,当我更改字段时,在PATCH请求中仅发送该字段。但是,文档显示直接弄乱属性哈希值很不好。有一个更好的方法吗?

javascript rest backbone.js
1个回答
0
投票

您可以使用模型方法,例如changedAttributespreviousAttributes等来查找要发送到服务器的信息,然后使用patchmodel.save选项:

[相反,如果您只希望将更改的属性发送到服务器,请调用model.save。您将仅通过传入的属性将HTTP PATCH请求发送到服务器。

model.save(attrs, {patch: true})是您想成为有效负载的任何位置

© www.soinside.com 2019 - 2024. All rights reserved.