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、最初に使用すると、現在の関数がバインドされた関数に置き換えられます。したがって、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);
于 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 に答える