0

私は明らかなことを見逃していると確信していますが、Html オブジェクトのコレクションを作成して Play テンプレートに渡す方法はあり@(title: String)(content: Seq(Html))ますか? 各 Html オブジェクトがタブの本体であるタブ ページのグループを動的に生成しようとしています。

私の混乱は、テンプレートで Seq(Html) を作成する方法にあります。のようなもの@main("Home") Seq({...},{...})は機能せず、使用@(title: String)(contentTab1: Html)(contentTab2: Html)@main("Home") {...}, {...}て目的を無効にします。

何かのようなもの:

タブの内容( tab.scala.html):

@(content: Html, tab: models.Tab, isActive: String)
<section class="mdl-layout__tab-panel @isActive" id="fixed-tab-@tab.id">
      <div class="page-content">@content</div>
</section>

メイン テンプレート ( main.scala.html):

@main(title: String, tabs: List[models.Tab])(contentSeq: Seq[Html])

ページ テンプレート:

@(tabs: List[models.Tab])
@main("title", tabs) {
    <!-- tab1 content -->
} {
  <!-- tab2 content -->
}

*マッチングSeq[Html]List[models.Tab]サイズの悪いデザインは無視してください

4

2 に答える 2

1

コンパイルされた Play テンプレートは基本的に単なる関数 (またはメソッドを持つオブジェクトapply(...)) であるため、タブ コンテンツ用の単一の (部分的な) テンプレートがあると仮定すると、次のように使用してタブ データに適用できますmap

メイン テンプレート ( main.scala.html):

@main(title: String, tabs: Seq[Html])(content: Html)

<h1>@title</h1>
<ul class="tabs">
   @tabs.map { tab =>
     @tab
   }
</ul>
@content

タブの内容 ( tab.scala.html):

@(name: String)

<li>@name</li>

したがって、各ページ テンプレートは次のようになります。

@(title: String)

@main(title, Seq("tab1", "tab2", "tab3").map(name => views.html.tab(name)) {
    <p>This is some content</p>
}

... または、複数のタブ部分がある場合:

@main(title, Seq(views.html.tab1("tab1"), views.html.tab2("tab2"))) {
    <p>This is some content</p>
}

さらに別の方法として、各タブを再利用可能なブロックとしてレンダリングし、それらをシーケンスとしてマスター テンプレートに渡します。

@(title: String)

@tab1 = {
    <li>Content for tab 1</li>
}

@tab2 = {
    <li>Content for tab 2</li>
}

@main(title, Seq(tab1, tab2)) {
    <p>This is some content</p>
}
于 2016-03-07T18:08:58.737 に答える
0

あなたの目的のために、単一のパラメーターリストがうまく機能するように見えます。

@(title: String, contents: Seq[String])

詳細については、play フレームワークの Web サイトを参照してください。

于 2016-03-07T18:03:13.693 に答える