几组后我可以保存模型的更改属性吗
Can I save changed attributes of model after several set
我多次调用 set
方法并更改了几个属性。然后我想用 {patch: true}
将更改后的数据发送到服务器。
我可以使用model.save(attrs, {patch: true});
,但我不知道attrs
。我无法使用 model.toJSON()
(不需要的字段)或 model.changedAttributes()
(仅最后一组)来获取 attrs
。
我该怎么做?
为模型绑定监听器
如果你在视图中设置值,监听器应该是这样的(最好写在初始化函数中)
this.listenTo(this.model, "change", this.onModelValueChange);
还有你的监听函数
onModelValueChange: function(model, args) {
model.save(args.changed, {patch: true});
}
Optionally, an external attributes hash can be passed in, returning the attributes in that hash which differ from the model.
因此您可以在开始修改之前尝试使用 toJSON
缓存模型状态。修改完成后,将新状态传递给 changedAttributes
方法以检索更改的属性哈希,然后发送补丁请求。像
var oldAttrs = model.toJSON();
// ...do modifications here
var changedAttrs = model.changedAttributes(oldAttrs);
dataTosend = model.pick(_.keys(changedAttrs));
model.save(dataTosend, {patch: true});
虽然 ,但我有更好的方法来实现他的建议。
与其制作属性的原始克隆,我更喜欢在应用程序启动或视图初始化时保留模型的 master 副本。
this.master = this.model.clone();
// ... then changes are made to this.model
准备保存时,使用主模型比较属性并直接检索更改。
var changes = this.master.changedAttributes(this.model.attributes);
if (changes !== false) this.model.save(changes, { patch: true });
有了这个,你可以完全跳过 dataTosend = model.pick(_.keys(changedAttrs))
,因为 changes
已经是与主模型初始状态的所有差异的对象。
如果是模型保存后重新使用的视图:
var View = Backbone.View.extend({
initialize: function() {
this.updateMaster();
},
saveChanges: function() {
var changes = this.master.changedAttributes(this.model.attributes);
if (changes !== false) {
this.model.save(changes, {
patch: true,
context: true,
success: this.updateMaster
});
}
},
updateMaster: function() {
this.master = this.model.clone();
},
});
我多次调用 set
方法并更改了几个属性。然后我想用 {patch: true}
将更改后的数据发送到服务器。
我可以使用model.save(attrs, {patch: true});
,但我不知道attrs
。我无法使用 model.toJSON()
(不需要的字段)或 model.changedAttributes()
(仅最后一组)来获取 attrs
。
我该怎么做?
为模型绑定监听器
如果你在视图中设置值,监听器应该是这样的(最好写在初始化函数中)
this.listenTo(this.model, "change", this.onModelValueChange);
还有你的监听函数
onModelValueChange: function(model, args) {
model.save(args.changed, {patch: true});
}
Optionally, an external attributes hash can be passed in, returning the attributes in that hash which differ from the model.
因此您可以在开始修改之前尝试使用 toJSON
缓存模型状态。修改完成后,将新状态传递给 changedAttributes
方法以检索更改的属性哈希,然后发送补丁请求。像
var oldAttrs = model.toJSON();
// ...do modifications here
var changedAttrs = model.changedAttributes(oldAttrs);
dataTosend = model.pick(_.keys(changedAttrs));
model.save(dataTosend, {patch: true});
虽然
与其制作属性的原始克隆,我更喜欢在应用程序启动或视图初始化时保留模型的 master 副本。
this.master = this.model.clone();
// ... then changes are made to this.model
准备保存时,使用主模型比较属性并直接检索更改。
var changes = this.master.changedAttributes(this.model.attributes);
if (changes !== false) this.model.save(changes, { patch: true });
有了这个,你可以完全跳过 dataTosend = model.pick(_.keys(changedAttrs))
,因为 changes
已经是与主模型初始状态的所有差异的对象。
如果是模型保存后重新使用的视图:
var View = Backbone.View.extend({
initialize: function() {
this.updateMaster();
},
saveChanges: function() {
var changes = this.master.changedAttributes(this.model.attributes);
if (changes !== false) {
this.model.save(changes, {
patch: true,
context: true,
success: this.updateMaster
});
}
},
updateMaster: function() {
this.master = this.model.clone();
},
});