Backbone 0.9.9: różnica między listenTo a on

Staram się poznać nowe zmiany, które zrobili w Backbone 0.9.9.

Obecnie mam problemy ze zrozumieniem różnicy między listenTo a on:

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

});

On

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

});

Słyszałem, że listenTo pozwala z stopListening zrezygnować ze wszystkich zdarzeń, gdy na przykład Widok zostanie usunięty, aby uniknąć wycieków pamięci.

Czy to jedyny powód?
Author: Emile Bergeron, 2012-12-26

2 answers

listenTo i stopListening pochodzili ze społeczności, w zasadzie. Pomagają one ułatwić wiązanie i odłączanie zdarzeń.

Istnieje wiele istniejących dokumentacji i postów na blogu wokół tego pomysłu, w tym rzeczy, które napisałem na ten temat.

Johnny Oshika jest pierwszą osobą, którą zobaczyłem używając tej techniki. Został on pierwotnie opublikowany jako odpowiedź na pytanie StackOverflow tutaj: Backbone.js: ponownie zaludnić czy odtworzyć widok?

You can read what I ' ve napisano o tym tutaj:

 40
Author: Derick Bailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:39

Podczas tworzenia widoku zarówno listenTo, jak i on dodają obsługę zdarzeń. Jednak gdy Widok zostanie zniszczony, wywołanie {[0] } automatycznie usunie obsługę zdarzenia . To zapobiega wyciekom pamięci i słuchaczom zdarzeń zombie.

Więc użyj on, jeśli chcesz samodzielnie zarządzać obsługą. Po prostu zadzwoń off. W przeciwnym razie zadzwoń listenTo.

 53
Author: Richard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-02 13:30:48