Backbone listenTo多个属性触发多个事件

Dav*_*vid 5 backbone.js backbone-events

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

this.listenTo(this, 'change:re change:read', this.patch);
Run Code Online (Sandbox Code Playgroud)

补丁的功能如下:

patch: function(object) {
  this.save(object.changed, { patch: true });
},
Run Code Online (Sandbox Code Playgroud)

在我的应用程序的其他地方,我可能会运行:

model.set({ re: 1 });
Run Code Online (Sandbox Code Playgroud)

要么:

model.set({ read: new Date() });
Run Code Online (Sandbox Code Playgroud)

这两个都很完美,但是当我打电话时:

model.set({ re: 1, read: new Date() });
Run Code Online (Sandbox Code Playgroud)

补丁函数被调用两次,并有两个往返到服务器.如果可能的话,我想保持这一次往返.

任何人都可以帮助这个吗?

非常感谢

大卫

mu *_*ort 5

您的patch方法将为'change:re'事件调用一次,并再次为'change:read'事件调用.Backbone不知道你的意思是"告诉我是否至少有一个reread更改",它只是知道你想要被告知是否有re变化并告知是否有read变化.

您可以'change'使用changed哈希监听事件并自行进行过滤:

model.changed

更改的属性是一个包含自上次已更改的所有属性的内部散.

像这样的东西:

this.listenTo(this, 'change', this.patch);
Run Code Online (Sandbox Code Playgroud)

然后:

patch: function() {
  if('re' in this.changed || 'read' in this.changed)
    this.save(this.changed, { patch: true });
}
Run Code Online (Sandbox Code Playgroud)

演示:https://jsfiddle.net/ambiguous/ja20z021/