2016-08-17 66 views
0

我目前使用Marionette 2.4.7并使用LayoutViews结构化我的应用程序。采取非常简单的例子LayoutViews(通常是模板住分开):Marionette LayoutView地区 - 显示非ItemView内容

var LayoutView = Marionette.LayoutView.extend({ 
    template: "<div id="main-region"></div><div id="menu-region"></div>", 
    regions: { 
     mainRegion: "#main-region", 
     menuRegion: "#menu-region" 
    } 
}); 

var MainLayoutView = Marionette.LayoutView.extend({ 
    template: "<div id="title-region"></div><div id="content-region"></div>", 
    regions: { 
     titleRegion: "#title-region", 
     contentRegion: "#content-region" 
    } 
}); 

基本上页被分成两个部分,一个部分显示网页的标题,并显示主内容的部分。我使用下面的填充内容区域:

var layoutView = new LayoutView(); 

    var mainLayoutView = new MainLayoutView({ className: "someClass" }); 
    layoutView.mainRegion.show(mainLayoutView); 
    var contentLayoutView = new ContentLayoutView(); 
    mainLayoutView.contentRegion.show(contentLayoutView); 

ContentLayoutView有子区,做了很多其他的东西,所以是一个相当复杂的视图。 MainLayoutViewtitleRegion只显示几个字,所以很简单。

现在对我的问题,有没有一种方法可以解决需要为titleRegion创建ItemView,只需显示几个字?这种情况在我的应用程序中重复了几次,似乎有点矫枉过正,需要为每种情况分别创建ItemViews。我知道我可以使用设置DIV HTML

$("#title-region").html("Page title"); 

,但我要坚持做事情的方式Marionette

我曾尝试:

mainLayoutView.titleRegion.show("Page name"); 

,但我得到的错误:'view.on' is not a function,显然是因为.show期待一个ItemView/LayoutView

+0

的地方是你的'mainLayoutView'重新呈现在您需要要更改标题还是需要标题在“contentRegion”中更改视图时进行更改? – rdubya

+0

@rdubya当用户滚动浏览菜单时,会重新呈现'mainLayoutView',每次都设置'titleRegion'和'contentRegion' –

+0

您可以添加进行重新渲染的代码的相关部分吗?如果你不能,那没问题。如果我能看到它,给你一些示例代码会容易一点。 – rdubya

回答

1

我可能会包含标题作为mainLayoutView模板的一部分。我不知道你用的是什么模板语言,但它可能看起来像:

"<div id="title-region">{title}</div><div id="content-region"></div>"

然后你就可以在你的MainLayoutView定义,就像定义templateHelpers功能:

templateHelpers: function() { 
    return { title: this.options.title }; 
} 

当您创建您MainLayoutView你会再传给你需要的任何标题:

var layoutView = new LayoutView(); 
var mainLayoutView = new MainLayoutView({ 
              className: "someClass", 
              title: "Welcome!" 
             }); 
layoutView.mainRegion.show(mainLayoutView); 
var contentLayoutView = new ContentLayoutView(); 
mainLayoutView.contentRegion.show(contentLayoutView); 

title可能实际上已经在视图属性(我不记得了),所以你可能需要使用layoutTitle或类似的东西在我用title

+0

非常好的解决方案:)干杯。 –

+0

我现在已经触及'contentRegion'包含需要在用户导航时更新'titleRegion'的菜单的问题。 –