Как изменить значение контейнера item view в соответствии с коллекциями в Marionette.CompositeView

У меня есть вид, такой как

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

Это представление создается следующим образом:

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

Для каждого элемента, который в resultList, создается элемент resultView в панели статистики. В панели статистики есть некоторые div с идентификаторами, и когда я даю id item itemViewContainer, эти представления создаются в этом div. Это нормально, но я хочу создать некоторые представления в div и некоторые представления в другом div. Я хочу контролировать значение коллекции, и в соответствии с этим значением я хочу установить itemViewContainer. Например, в коллекции есть a, b, c. Если "a" будет создано как resultView, оно должно быть в

. Если это "b", оно должно быть в

Является ли это возможным? Или как я могу это сделать? Или есть другой способ сделать это? Спасибо за помощь.

1 ответ

Вы должны переопределить метод 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');
 }
});

licensed under cc by-sa 3.0 with attribution.