wake-up-neo.com

Backbone 0.9.9: Unterschied zwischen listenTo und on

Ich versuche, die neuen Änderungen in Backbone 0.9.9 zu lernen.

Derzeit habe ich Probleme, den Unterschied zwischen listenTo und on zu verstehen:

listenTo

var View = Backbone.View.extend({

    tagName: "div",

    intialize: function() {
        this.listenTo(this.model, 'change', this.render);
    },

    render: function() {
        this.$el.empty();
        this.$el.append('<p>hello world</p>');
    }

});

ein

var View = Backbone.View.extend({

    tagName: "div",

    intialize: function() {
        this.model.on('change', this.render, this);
    },

    render: function() {
        this.$el.empty();
        this.$el.append('<p>hello world</p>');
    }

});

Ich habe gehört, dass listenTo es mit stopListening ermöglicht, alle Ereignisse abzubestellen, wenn beispielsweise die Ansicht entfernt wird, um Speicherlecks zu vermeiden.

Ist das der einzige Grund?

55
bodokaiser

listenTo und stopListening kamen im Grunde genommen aus der Community. Sie erleichtern das Binden und Aufheben der Bindung von Ereignissen.

Es gibt eine Menge Dokumentationen und Blog-Posts, die sich mit der Idee befassen, einschließlich Sachen, die ich zu diesem Thema geschrieben habe.

Johnny Oshika ist die erste Person, die ich mit dieser Technik gesehen habe. Es wurde ursprünglich als Antwort auf eine StackOverflow-Frage hier veröffentlicht: Backbone.js: Ansicht neu füllen oder neu erstellen?

Sie können hier lesen, was ich darüber geschrieben habe:

40
Derick Bailey

Wenn Sie eine Ansicht erstellen, fügen sowohl listenTo als auch on die Ereignisbehandlung hinzu. Wenn die Ansicht jedoch zerstört wird, wird der listenTo -Aufruf den Ereignishandler automatisch entfernen . Dies verhindert Speicherlecks und Zombie Event Listener.

Verwenden Sie also on, wenn Sie den Handler selbst verwalten möchten. Rufen Sie einfach off auf. Andernfalls rufen Sie listenTo auf.

53
Richard