Remove all event listeners of a Backbone view

16,435

Anywhere in your View:

this.undelegateEvents();

You can then manually rebind events at a later time with delegateEvents();

I use a method added to the Backbone.View prototype to easily clean up views:

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

// internal usage
this.close();

// external usage
myView.close();

EDIT 19/07/2013

Backbone v0.9.9 added the .listenTo() method to views, making it easy to unbind external events when the view is removed.

You can read more here:

Share:
16,435

Related videos on Youtube

Michael
Author by

Michael

Updated on September 14, 2022

Comments

  • Michael
    Michael over 1 year

    Is there a way to remove all event listens instantiated by a backbone view? For example, suppose I have the following HTML/JavaScript. When #box is clicked, I want a pop-up to say hello.

    <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();
    

    Now, I want to remove the event listener. Setting listener to something else doesn't work:

    listener = ''; // doesn't work
    

    How do I remove the event listener?