3

私は次のようにcompositeViewとItemViewsを持っています(私のビューの簡略化されたバージョン):

testView1 = Backbone.Marionette.ItemView.extend({
    template: '#test-view-1'
}
testView2 = Backbone.Marionette.ItemView.extend({
    template: '#test-view-2'
}

TestView = Backbone.Marionette.CompositeView.extend({
    template: '#test-template',
    itemViewContainer:'tbody',
    itemView: testView1,
    getItemView: function(item){
        console.log('item');        //<==== FIRED 101 TIMES
        if (!item) {                //<==== WHY DO I NEED THIS
            return testView1;       //<==== WHY DO I NEED THIS
        } else {
            return ('testView' + item.id);
        }
    }
});

問題は、CompositeViewが初期化されるときに、getItemViewコードを渡す前にコードを実行itemしてエラーを生成することです。追加した条件がないifと、ビューが壊れます。

複合ビューに渡される私のコレクションには100個のモデルが含まれており、console.log('item');が101回起動され、最初は常に「未定義」であり、残りの100回は予想どおり100個のモデルです。

私の質問は、なぜitem毎回存在するかどうかをチェックする必要があり、このチェックを必要としないようにするために何かできることがあるのか​​ということです。

4

1 に答える 1

2

カスタム getItemView 関数を使用してコードを試してみましたが、同じ動作が得られました。

呼び出しをトレースすると、CompositeView のコンストラクターで getItemView が 1 回呼び出され、渡した itemView を CompositeView のオブジェクトに割り当てるように見えます。this.itemView = this.getItemView();

したがって、正しい itemView インスタンスを返す前にアイテムが渡されたかどうかを確認することで、正しくやっていると思います。

于 2013-03-09T12:00:50.537 に答える