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 回答