在删除绑定的对象后,如何取消绑定事件处理程序?

时间:2013-06-30 08:52:18

标签: backbone.js

我有以下情况:

我有一个模型,它有一个属性,它本身就是一个模型。 在我看来,我绑定到这样的子模型:

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

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

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

  

object.stopListening([other],[event],[callback])

     

告诉对象停止收听事件。或者调用stopListening   没有参数让对象删除所有已注册的对象   回调......或者通过告诉它只删除它来更精确   它正在侦听特定对象或特定事件的事件,   或仅是特定的回调

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

this.stopListening(this.handleChange);

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

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

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

这不会导致错误,但我怎么能确定它确实有效?

1 个答案:

答案 0 :(得分: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...
});