javascript - 重置backbone.js属性哈希
问题描述
我在主干中创建了一个模型:
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 请求中发送该字段。但是,文档表明直接使用属性哈希是不好的。有一个更好的方法吗?
解决方案
您可以使用诸如等的模型方法changedAttributes
来previousAttributes
查找要发送到服务器的信息,然后使用该patch
选项model.save
:
相反,如果您只想将更改后的属性发送到服务器,请调用
model.save(attrs, {patch: true})
. 您将收到仅包含传入属性的服务器的 HTTP PATCH 请求。
attrs
你想成为有效载荷的东西在哪里
推荐阅读
- jquery - jquery删除没有id的特定div
- java - 在Java中为二维数组赋值
- xaml - UWP - 如何通过状态绑定不同的 SolidColorBrush?
- javascript - 如何在 React Js 中的映射路由数组上传递道具
- java - thread.join() 在概念上是如何工作的?
- azure - 使用环境变量配置 Azure Function 的 LogLevel
- android - 独立的透明活动在最近持有先前意图的人中显示
- java - Apache POI 找不到突出显示的文本
- python - 使用键获取字典的最高值,直到达到给定的限制
- linux - 如何在其他项目中使用 Bluez .la 文件?