Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干侦听触发多个事件的多个属性_Backbone.js_Backbone Events - Fatal编程技术网

Backbone.js 主干侦听触发多个事件的多个属性

Backbone.js 主干侦听触发多个事件的多个属性,backbone.js,backbone-events,Backbone.js,Backbone Events,我有一个模型,在初始化功能中,我有以下代码: this.listenTo(this, 'change:re change:read', this.patch); 补丁函数如下所示: patch: function(object) { this.save(object.changed, { patch: true }); }, this.listenTo(this, 'change', this.patch); 在我的应用程序的其他地方,我可以运行: model.set({ re: 1

我有一个模型,在初始化功能中,我有以下代码:

this.listenTo(this, 'change:re change:read', this.patch);
补丁函数如下所示:

patch: function(object) {
  this.save(object.changed, { patch: true });
},
this.listenTo(this, 'change', this.patch);
在我的应用程序的其他地方,我可以运行:

model.set({ re: 1 });
或:

但是,当我打电话时,这两种方法都能很好地发挥作用:

model.set({ re: 1, read: new Date() });
补丁函数被调用两次,并且有两次到服务器的往返。如果可能的话,我想把这次旅行减少到一次往返

有人能帮我做这个吗

非常感谢


David

您的
补丁
方法会为
'change:re'
事件调用一次,为
'change:read'
事件调用一次。主干网并不知道您真正的意思是“告诉我
re
read
中是否至少有一个发生了变化”,它只知道如果
re
发生了变化,您希望被告知,如果
read
发生了变化,则被告知

您可以监听
'change'
事件,并使用散列自己进行筛选:

已更改
型号。已更改

changed属性是内部哈希,包含自上次设置以来已更改的所有属性

大概是这样的:

patch: function(object) {
  this.save(object.changed, { patch: true });
},
this.listenTo(this, 'change', this.patch);
然后:

patch: function() {
  if('re' in this.changed || 'read' in this.changed)
    this.save(this.changed, { patch: true });
}
patch: _.debounce(function(object){
    this.save(object.changed, { patch: true });
},100)

演示:

您可以使用
解除补丁函数的干扰。解除补丁
,如下所示:

this.listenTo(this'change:re change:read',this.patch)

然后:

patch: function() {
  if('re' in this.changed || 'read' in this.changed)
    this.save(this.changed, { patch: true });
}
patch: _.debounce(function(object){
    this.save(object.changed, { patch: true });
},100)

“100”以毫秒为单位,即函数在调用save()之前等待的时间。在这段时间内,可以发生任意数量的更改事件,但保存只调用一次。

非常感谢,现在看来很明显!;-)