我有以下情况:
我有一个模型,它有一个属性,它本身就是一个模型。 在我看来,我绑定到这样的子模型:
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);
这不会导致错误,但我怎么能确定它确实有效?
答案 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...
});