我正在尝试让我的木偶视图与应用程序区域和布局结合使用,但我似乎无法渲染布局中的嵌套视图。
编辑:我希望OptionsView
和BreadcrumbsView
都呈现在NavigationLayout
中,这应该在导航区域中呈现。但是,根本不呈现导航区域。控制台不显示任何错误。
我的结构如下:
- Navigation region
- Navigation layout
- Options region
- Breadcrumbs region
- Content region
将ItemView
分配给导航区域按预期工作。
App = new Backbone.Marionette.Application();
App.addRegions({
'nav': '#nav',
'content': '#content'
});
var NavigationLayout = Backbone.Marionette.Layout.extend({
template: '#nav-template',
regions: {
'breadcrumbs': '#breadcrumbs',
'options': '#options'
}
});
var BreadcrumbsView = Backbone.Marionette.ItemView.extend({
template: '#breadcrumbs-template'
});
var OptionsView = Backbone.Marionette.ItemView.extend({
template: '#options-template'
});
var ContentView = Backbone.Marionette.ItemView.extend({
template: '#content-template'
});
App.addInitializer(function(options) {
var navigationLayout = new NavigationLayout();
App.nav.show(navigationLayout);
App.content.show(new ContentView());
navigationLayout.breadcrumbs.show(new BreadcrumbsView());
navigationLayout.options.show(new OptionsView());
});
$(function() {
App.start();
});
可以在此处找到简化的测试用例
好的,终于找到了问题:您无法在布局中options
命名区域。
中定义的所有区域都直接附加到布局实例。因此,区域定义如下:
Layout.extend({
regions: {
options: "#options"
}
});
最终将layoutInstance.options
设置为区域实例。这是一个问题,因为 Backbone.View 定义并将options
用于其他目的。
将区域重命名为任何现有视图使用的现有关键字或属性以外的任何名称都将解决此问题。
Layout.extend({
regions: {
optionRegion: "#options"
}
});
在这里工作 JSFiddle:http://jsfiddle.net/tegon/64ovLf64/