web-dev-qa-db-ja.com

バックボーン0.9.9:listenToとonの違い

Backbone 0.9.9で行われた新しい変更を学習しようとしています。

現在、listenToonの違いを理解するのに問題があります。

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

});

たとえば、メモリリークを避けるためにビューが削除されたときに、listenTostopListeningを使用してすべてのイベントをサブスクライブ解除できると聞いています。

これが唯一の理由ですか?

55
bodokaiser

listenTostopListeningは基本的にコミュニティから来ました。イベントのバインドとバインド解除を簡単にするのに役立ちます。

このテーマについて書いたものを含め、アイデアを取り巻く多くの既存のドキュメントとブログ投稿があります。

ジョニー・オシカは、私がこの技術を使用して見た最初の人です。もともとは、StackOverflowの質問に対する回答としてここに投稿されました: Backbone.js:ビューを再作成または再作成しますか?

これについて私が書いたことをここで読むことができます:

40
Derick Bailey

ビューを作成すると、listenToonの両方がイベント処理を追加します。ただし、ビューが破棄されると、listenTo呼び出しは イベントハンドラーを自動的に削除します になります。この メモリリークを防ぐ およびゾンビイベントリスナー。

したがって、ハンドラを自分で管理する場合は、onを使用します。必ずoffを呼び出してください。それ以外の場合は、listenToを呼び出します。

53
Richard