2

私はBackboneに不慣れで、いくつかの例を実行しようとしていますが、これに固執しています。私は以下のBackBoneビューを持っています:

CommentBoxView = Backbone.View.extend({
    initialize: function () {
        this.render();
    },
    render: function () {
        var template = _.template( $("#comment_box_template").html(), {} );
        this.el.html(template);
    },
    events: {
        "keypress textarea": "doKeyPress"
    },
    doKeyPress: function (event) {
        console.log(event);
    }
});

すべて正常に実行されていますが、交換した場合

this.el.html(template);

これとともに:

this.el = $(template).replaceAll(this.el);

キープレスイベントはまったく発生しません。なぜそれが起こったのか、そしてこのコードを機能させる方法を誰かに説明してもらえますか?どうもありがとうございました。

4

1 に答える 1

6

バックボーンは、ビューのdelegateEventsメソッドを使用してjQuerydelegate呼び出しをビューにバインドします。elこれdelegateは、ビューのすべてのイベントを処理するものです。これを行う場合:

this.el = $(template).replaceAll(this.el);

delegateあなたは束縛を失い、this.elあなたのイベントはそれに伴います。また、this.$el一致this.elしないことになり、それも良くありません。ビューを変更する適切な方法は、次elを使用することsetElementです。

setElement view.setElement(element)

バックボーンビューを別のDOM要素に適用する場合は、setElementを使用します。これにより、キャッシュされた$el参照が作成され、ビューの委任されたイベントが古い要素から新しい要素に移動されます。

したがって、次のように実行できるはずです。

this.setElement($(template).replaceAll(this.el));
于 2012-09-01T18:22:56.340 に答える