3

バックボーン ビューによってインスタンス化されたすべてのイベント リッスンを削除する方法はありますか? たとえば、次の HTML/JavaScript があるとします。#box をクリックすると、ポップアップが表示されます。

<div id="box" style="height: 100px; width: 100px; background-color: red"></div>

var Listener = Backbone.View.extend({
    el: "#box",
    events:  {
        'click #box' : 'hello'
    },
    hello: function () {
        alert('hello!');
    }
})

var listener = new Listener();

ここで、イベント リスナーを削除します。リスナーを別のものに設定しても機能しません:

listener = ''; // doesn't work

イベントリスナーを削除するにはどうすればよいですか?

4

1 に答える 1

14

ビュー内のどこでも:

this.undelegateEvents();

その後、後でイベントを手動で再バインドできますdelegateEvents();

Backbone.View プロトタイプに追加されたメソッドを使用して、ビューを簡単にクリーンアップします。

Backbone.View.prototype.close = function() {
    this.undelegateEvents();
    this.remove();
}

// internal usage
this.close();

// external usage
myView.close();

編集 19/07/2013

Backbone v0.9.9 では、この.listenTo()メソッドがビューに追加され、ビューが削除されたときに外部イベントのバインドを簡単に解除できるようになりました。

ここでもっと読むことができます:

于 2012-10-19T00:58:40.423 に答える