Марионетка: Как добавить LayoutView в виде строки в таблицу CompositView?
Я создаю таблицу с помощью Backbone.js и Marionette.js. Моя коллекция моделей создает строки в таблице, которые вставляются в <tbody>
,
Я хочу прикрепить одну строку вверху таблицы, которая не является частью моей коллекции. Это определено ранее LayoutView
,
Обычно я просто добавляю другой регион, но поскольку я работаю с таблицей, я не могу добавить дополнительный div
к tbody
как стол выплюнет его из стола, так как его не <tr>
в пределах <tbody>
,
Ниже моя попытка построить это в моем onShow
Функция CompositView:
var SetAllTargets = Backbone.Marionette.LayoutView.extend({
template: JST["common/cubes/table/set-all-rows"],
tagName: "tr",
className: "set-all-targets"
});
App.Table = Marionette.CompositeView.extend({
template: JST["common/targets/layout"],
className: "targets",
childView: RowTarget,
childViewContainer: "tbody",
regions: {
targetsRegion: ".targets-region"
},
onShow: function() {
var setAllTargetsRow = new SetAllTargets();
var setAllTargetsRegion = "<tr class='target set-all-targets'></tr>";
this.$el.find("tbody").prepend(setAllTargetsRegion);
this.$el.find(".set-all-targets").show(setAllTargetsRow);
}
)};
Еще одна попытка была поставить
<tr class='target set-all-targets'> ...child elements here </tr>
в шаблон и прикрепить view.el
в моем onShow
функционировать так:
onShow: function() {
var setAllTargetsRow = new SetAllTargets();
this.$el.find("tbody").prepend(setAllTargetsRow.el);
}
Но это приводит только к HTML <tr class='target set-all-targets'></tr>
помещается в верхнюю часть таблицы, но ни один из дочерних элементов.
1 ответ
Вы можете использовать CollectionView.addChild
метод в вашем композите, чтобы вставить что-то перед отображением вашей коллекции:
onBeforeRenderCollection: function() {
this.addChild(null, <View>, 0);
}
Посмотрите эту скрипку для примера в действии.