2016-08-17 10 views
0

私は現在Marionette 2.4.7を使用しており、LayoutViewsを使用してアプリケーションを構成しています。非常に簡単な例LayoutViews(通常、テンプレートは別々に住ん)を取る:Marionette LayoutView regions - 非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" 
    } 
}); 

を基本的にページは、ページのタイトルとメインのコンテンツを表示するためのセクションを表示するために、2つのセクション、セクションに分割されます。私は、次を使用してコンテンツ領域に移入:

var layoutView = new LayoutView(); 

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

ContentLayoutViewはサブ領域を持ち、他のもののかなり多くを行うので、非常に複雑図です。 MainLayoutViewtitleRegionは数語しか表示しないので、非常に簡単です。

私の質問には、titleRegionItemViewを作成する必要性を回避する方法がいくつかあります。このシナリオはアプリケーション全体を通して数回繰り返され、ケースごとに別々のItemViewsを作成する必要があります。私は私が使用してDIV HTMLを設定することができます知っている:

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

が、私は物事のMarionetteやり方に固執したいです。

私が試してみました:

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

を私はエラーを取得:'view.on' is not a function、明らかに.showItemView/LayoutViewを期待しているからです。

+0

を使用した場所でそのようなものを使用する必要があるかもしれませんので、titleは実際にはすでに、(私は覚えていないこと)ビューのプロパティかもしれあなたが必要とするとき、あなたの 'mainLayoutView'再レンダリングされます変更するタイトル、または 'contentRegion'でビューを変更するときにタイトルを変更する必要がありますか? – rdubya

+0

@rdubya 'mainLayoutView'は、ユーザがメニューをスクロールするときに再レンダリングされ、' titleRegion'と 'contentRegion'が毎回設定されます –

+0

再レンダリングを行うコードの関連部分を追加できますか?あなたができなければ、それは大丈夫です。もし私がそれを見ることができれば、あなたにサンプルコードを与える方が少し簡単です。 – rdubya

答えて

1

おそらく、mainLayoutViewのテンプレートの一部としてタイトルを含めることになります。私はあなたが使用しているテンプレート言語はよく分からないが、それはのようなものに見えるかもしれません:あなたが作成する場合

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

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

を次に、あなたのMainLayoutView定義でtemplateHelpers機能などを定義することができます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); 

あなたがlayoutTitleまたは私はtitle

+0

非常に良い解決策:)乾杯。 –

+0

私は今、 'contentRegion'がユーザがナビゲートするときに' titleRegion'を更新する必要があるメニューを含む問題を打ちました。 –

関連する問題