微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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/

原文地址:https://www.jb51.cc/js/150593.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐