0

私は次のような見解を持っています

statisticsView = Marionette.CompositeView.extend({
    itemView : ResultView,
    template : StatisticsPanel,
    itemViewContainer : "..."
});

このビューは次のように作成しています:

var statisticsView = new StatisticsView({
    collection : resultList,                
});

resultList 内の各項目について、resultView が統計パネルで作成されています。統計パネルには ID を持つ div がいくつかあり、 itemViewContainer に ID を指定すると、このビューがこの div に作成されます。それは問題ありませんが、div にいくつかのビューを作成し、別の div にいくつかのビューを作成したいと考えています。コレクションの値を制御したいのですが、その値に応じて itemViewContainer を設定したいと考えています。たとえば、コレクションには a、b、c があります。"a" が resultView として作成される場合は、<div id = "a">. 「b」なら入るはず<div id = "b">

出来ますか?またはどうすればそれを行うことができますか?または、これを行う他の方法はありますか?助けてくれてありがとう。

4

1 に答える 1

2

appendHtml メソッドをオーバーライドする必要があります。このようなものが動作するはずです:

statisticsView = Marionette.CompositeView.extend({
    itemView : ResultView,
    template : StatisticsPanel,
    itemViewContainer : "...", // Make this a selector to a common parent of your div#a and div#b sub containers
    itemViewContainerA: null, // Cache container #a
    itemViewContainerB: null, // Cache container #b

    appendHtml: function(collectionView, itemView, index) {
        var container;
        if(itemView.model == a) { // Check if the current model goes to #a
            container = this.itemViewContainerA;
        } else if (itemView.model == b) { // Check if the current model goes to #b
            container = this.itemViewContainerB;
        }
        container.append(itemView.el);
    },

    onRender: function() {
        this.itemViewContainerA = this.$('div#a');
        this.itemViewContainerB = this.$('div#b');
    }
});
于 2013-08-15T15:35:09.693 に答える