1

我有以下情况:

我有一个模型,它具有一个属性,即模型本身。在我看来,我像这样绑定到子模型:

this.listenTo(this.model.get("childModel"), "change", this.handleChange);

现在我有一个案例,由于用户操作,可以从某个控制器取消设置子模型。在这种情况下,我想取消绑定上述处理程序。

在函数 stopListening 的 Backbone.js 文档中,它说:

object.stopListening([其他], [事件], [回调])

告诉一个对象停止监听事件。要么调用不带参数的 stopListening 以使对象删除其所有已注册的回调......或者更精确地告诉它只删除它正在侦听的特定对象、特定事件 或特定回调的事件。

因此,当该子模型未设置时,我尝试在我的视图中执行此操作:

this.stopListening(this.handleChange);

从文档中,我认为这是有效的,但我从 Backbone 收到了一个错误。

所以现在我正在尝试这个:

this.stopListening(null, "change", this.handleChange);

这不会导致错误,但我如何确定它确实有效?

4

1 回答 1

1

如果您要传递参数(也就是说,只要您不想删除所有侦听器),则object该方法的参数是必需的。stopListening所以你必须得到你取消设置的模型。

例如,您可以做的是让您的视图监听父模型的childModel更改,因此您可以在未设置后立即删除监听器:

this.listenTo(this.model, 'change:childModel', function(m, v, opt) {
  if(opt.unset)
    this.stopListening(m.previous('childModel'), 'change'); //not sure if you need the second argument, think not...
});
于 2013-06-30T11:09:43.497 回答