我有一个控制HTML5音频播放器的音频播放器类。我正在监视音频播放器事件并将它们触发到相关视图。在视图文件中,这是我绑定适当事件的方式
app.audioPlayer.$el.bind('musicEnded', _.bind(this.onMusicEnded, this));
app.audioPlayer.$el.bind('askForNextMusic', _.bind(this.onAskForNextMusic, this));
app.audioPlayer.$el.bind('askForPreviousMusic', _.bind(this.onAskForPreviousMusic, this));
一旦我离开此视图,我想解除此视图中的事件。我为此尝试了这样的
app.audioPlayer.$el.unbind('musicEnded', _.bind(this.onMusicEnded, this));
app.audioPlayer.$el.unbind('askForNextMusic', _.bind(this.onAskForNextMusic, this));
app.audioPlayer.$el.unbind('askForPreviousMusic', _.bind(this.onAskForPreviousMusic, this));
但它似乎有任何影响。我怎样才能在backbonejs中正确地做到这一点? 感谢
答案 0 :(得分:2)
您的代码的问题是,您使用_.bind
绑定/取消绑定。因为这将始终创建一个新功能。所以你绑定的函数和你试图解除绑定的函数是不一样的,所以unbind将不起作用。
您必须保存对绑定函数的引用,或者在开头使用_.bindAll
,因为这将使用绑定函数替换当前函数。因此,当您使用bind / unbind时,它就是相同的函数:
_.bindAll(this, onMusicEnded)
// the will replace this.onMusicEnded with _.bind(this.onMusicEnded, this)
app.audioPlayer.$el.bind('musicEnded', this.onMusicEnded);
app.audioPlayer.$el.unbind('musicEnded', this.onMusicEnded);
答案 1 :(得分:0)
将回调函数绑定到对象。只要事件被触发,就会调用回调。
object.on(event, callback, [context])
从对象中删除先前绑定的回调函数。
object.off([event], [callback], [context])