0

在我的主干视图的初始化函数中,我创建了以下监听器:

this.listenTo(this.model.get('clusters'), 'add remove', this.saveChanges);

这成功地导致我的 saveChanges 函数在一次从“集群”集合中添加/删除模型时被调用。saveChanges 函数中只有一行:

this.model.save();

一旦被调用,添加/删除集群不再调用“添加”或“删除”事件。为什么保存模型会破坏听众?可以防止这种情况,还是有办法重新建立听众?

还是有一些我对模型和/或集合不了解的基本知识......?

4

1 回答 1

2

让我们分解您的代码:

你写

this.listenTo(this.model.get('clusters'), 'add remove', this.saveChanges);

这等于

var clusters = this.model.get('clusters');
this.listenTo(clusters, 'add remove', this.saveChanges);

现在我只假设在你得到那个事件之后你的模型中set()有一个新clusters对象。

这里的问题是您的视图仍然监听来自同一个旧clusters对象的事件,这不再相关 - 您的模型处理另一个对象!

另一种情况可能是,Backbone 在其模型中清除了视图的事件处理程序remove。如果您共享整个代码,可以很容易地确定。

于 2013-05-21T20:22:27.770 回答