2

我有一个控制 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中正确地做到这一点?谢谢

4

2 回答 2

2

您的代码的问题是,您使用_.bind. 因为这将始终创建一个新功能。所以你绑定的函数和你尝试解绑的函数是不一样的,所以解绑是行不通的。

您必须保存对您绑定的函数的引用,或者_.bindAll在开始时使用,因为这会将您当前的函数替换为绑定的函数。因此,当您使用绑定/取消绑定时,它是相同的功能:

_.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);
于 2012-09-21T15:26:45.210 回答
0

http://backbonejs.org/#Events

将回调函数绑定到对象。每当触发事件时都会调用回调。

object.on(event, callback, [context])

从对象中删除先前绑定的回调函数。

object.off([event], [callback], [context])
于 2012-09-21T11:29:10.153 回答