web-dev-qa-db-fra.com

Backbone 0.9.9: Différence entre listenTo et on

J'essaie d'apprendre les nouveaux changements qu'ils ont apportés à Backbone 0.9.9.

Actuellement, j'ai des problèmes pour comprendre la différence entre listenTo et on:

écouter

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>');
    }

});

activé

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>');
    }

});

J'ai entendu dire que listenTo permet avec stopListening de se désinscrire de tous les événements lorsque, par exemple, la vue est supprimée pour éviter les fuites de mémoire.

Est-ce la seule raison?

55
bodokaiser

listenTo et stopListening provenaient essentiellement de la communauté. Ils aident à faciliter la liaison et la dissociation des événements.

Il y a beaucoup de documentation et de blogs existants autour de l'idée, y compris des choses que j'ai écrites sur le sujet.

Johnny Oshika est la première personne que j'ai vue utiliser cette technique. Il a été initialement publié comme réponse à une question StackOverflow ici: Backbone.js: repeupler ou recréer la vue?

Vous pouvez lire ce que j'ai écrit à ce sujet ici:

40
Derick Bailey

Lorsque vous créez une vue, listenTo et on ajoutent la gestion des événements. Cependant, lorsque la vue est détruite, l'appel listenTosupprimera automatiquement le gestionnaire d'événements . Cela empêche les fuites de mémoire et les écouteurs d'événements zombies.

Donc, utilisez on si vous souhaitez gérer le gestionnaire vous-même. Assurez-vous simplement d'appeler off. Sinon, appelez listenTo.

53
Richard