backbone.js – 嵌套Marionette区域,布局和视图

前端之家收集整理的这篇文章主要介绍了backbone.js – 嵌套Marionette区域,布局和视图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图让我的小木偶视图与应用程序区域和布局相结合,但是我似乎无法在布局中获取嵌套的视图来呈现.

编辑:我预计在NavigationLayout中渲染OptionsView和BreadcrumbsView,它应该在导航区域中呈现.但是,导航区域根本没有渲染.控制台不显示任何错误.

我的结构如下:

- 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();
});

可以找到减少的测试用例here

解决方法

好的,终于找到了问题:您不能在布局中命名区域选项.

布局中定义的所有区域都直接附加到布局实例.所以,这样定义的区域:

Layout.extend({
  regions: {
    options: "#options"
  }
});

最后将layoutInstance.options设置为Region实例.这是一个问题,因为Backbone.View定义并使用其他用途的选项.

将该区域重命名为任何现有视图所使用的现有关键字或属性以外​​的任何内容将会解决此问题.

Layout.extend({
  regions: {
    optionRegion: "#options"
  }
});

工作JSFiddle在这里:http://jsfiddle.net/tegon/64ovLf64/

猜你在找的JavaScript相关文章