1

ビュー内のいくつかのサブ要素を (jQuery セレクターを使用して) キャッシュしようとしています。

var theView = Backbone.View.extend({
    initialize:function(){
        this.$subEl = this.$el.find('.sub-el-class');
    },
    template: Handlebars.compile($('#view-template').html()),
    render: function(){
        this.$el.html(this.template(this.model.toJSON()));
        this.$subEl.hide();
        return this;
    }
});

ビューをレンダリングすると、$subEl (.sub-el-class) は非表示になりません。.sub-el-class 要素で何かを行う必要があるたびに、jQuery セレクターを使用する必要はありません。

私のコードでうまくいかないアイデアはありますか?

4

2 に答える 2

3

が呼び出されるたびrenderに、コードはビューのコンテンツ全体を再作成します。$elビューのルートノードを表します。したがって、キャッシュされた参照は失われます(存在する場合)。renderが呼び出された後、キャッシュされた参照を取得するようにコードを変更する必要があります。initializeは呼び出さずrender、ビューのルート要素への接続の直後に実行されます。

var theView = Backbone.View.extend({
    initialize:function(){

    },
    template: Handlebars.compile($('#view-template').html()),
    render: function(){
        this.$el.html(this.template(this.model.toJSON()));
        this.$subEl = this.$el.find('.sub-el-class');
        this.$subEl.hide();
        return this;
    }
});

また、ビューを閉じたときにキャッシュされた要素への参照を破棄するコードを追加することをお勧めします。

于 2013-02-22T11:48:28.847 に答える
2
this.$subEl = this.$el.find('.sub-el-class');

これは .sub-el-class へのポインターであり、ビューを初期化するときに設定します。

これを呼び出すたびに $subEl はすでにjQueryオブジェクトであるため、DOMを再度検索しません。

于 2013-02-22T10:54:02.347 に答える