从Backbone.js中的视图解除绑定模型

时间:2012-09-21 11:21:54

标签: javascript jquery-mobile backbone.js

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

2 个答案:

答案 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)

http://backbonejs.org/#Events

将回调函数绑定到对象。只要事件被触发,就会调用回调。

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

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

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