2

レンダリングされるすべてのバックボーン ビューに対して、同じ DOM 要素を選択して何かを行う必要がありますか? 一度に存在するのは、このビューの 1 つのみです。

たとえば、特定のバックボーン View で Bootstrap のタブ (タブ可能なプラグイン) を使用する必要があるとしますProduct。タブ可能なプラグインの初期化コードを関数に含めるのは正しいrenderですか?

render: function() {

    this.$el.html( this.template( this.model.toJSON() ) );

    // Activate Twitter Bootstrap Tabs
    $('.tab-bar').tab();
    $('.tab-bar .tab:first').tab('show');
    $('.tab-bar .tab').click(function(e) {
        e.preventDefault();
        $(this).tab('show');    });

    return this;
}

または、このセレクターを一度だけ呼び出す方法はありますか?.tab-barまだ存在していないものを含むクラスを持つすべての要素に対して起動します。

同様に、最初のタブにクリック ハンドラーが必要な場合

$('.tab:first').click(function(){
    console.log('hey!')'
}

そのビューのrender関数に配置しますか? ビューが複数回レンダリングされると、多くのclickイベントリスナーが作成されませんか?

4

1 に答える 1

0

render ではなく、initialize メソッドでイベント リスナーをバインドする必要があります。DOM 要素を複数回再レンダリングする場合を除きます。

編集

window.myView = Backbone.View.extend({

    events: {
        'click #someElementID': 'do_something',
    },

    initialize: function(){
        _.bindAll(this, 'render', 'do_something');
    },

    .....

    do_something: function(e){
        console.log("A click was made!", e.currentTarget);
    }

});
于 2012-10-05T12:45:00.390 に答える