我在让 Backbone.Marionette 与 Twitter Bootstrap 合作时遇到了问题。Bootstrap 期望标记符合预定义的模式才能工作,但是 Backbone 和 Marionette 处理事情的方式,似乎不可能使用 aMarionette.Layout为带有嵌入式下拉菜单的导航栏生成符合 Bootstrap 的标记。
这是问题所在:
假设我有一个Marionette.Layout代表导航栏,并且我想要一个region,我将在其中放置CollectionVieworCompositeView来管理下拉列表中的项目。是region一个选择器,所以在这种情况下,如果我们有:
<div class="navbar">
<ul class="nav">
<li>Static item</li>
<li id="dynamic-dropdown"></li>
</ul>
</div>
然后布局将指定动态下拉列表的区域,如下所示:
Marionette.Layout.extend({
regions: {
dropdown: '#dynamic-dropdown'
}
...
});
然后我会有一个CompositeView负责渲染下拉项目模型,为 Bootstrap 下拉菜单指定额外标记等。问题是似乎不可能#dynamic-dropdown成为$elfor the CompositeView,因为 Backbone 总是插入一个额外的div(或您在 中指定的任何内容tagName)。为了使下拉菜单按预期显示,我需要去掉那个额外的元素并让视图的 root 成为#dynamic-dropdown。
我整理了一个 jsfiddle 来说明我的意思。
tl;dr 如何使 aView的根元素成为 a 中指定的区域Marionette.Layout?

