Play!の組込みテンプレートタグで、オブジェクトの渡し方

Play!の組込みテンプレートタグで、引数渡すのに
少し迷ったのでメモ。

controllers/Application.java

public static void index() {
    List<Category> categories = Category.findAll();
    render(categories);
}


view/Application/index.html

<div class="container-fluid">
  <div class="row-fluid">
<!-- ここからサイドバー-->
    <div class="span3">
      <div class="well sidebar-nav">
        <ul class="nav nav-list">
          #{list items:categories, as:'category'}
            <li>
              <a href="#">${category.name}</a>
            </li>
          #{/list}
        </ul>
      </div><!--/.well -->
    </div><!--/span-->
<!-- ここまでサイドバー-->
    <div class="span9">
      <h1>Hello, world!</h1>
    </div><!--/span-->
  </div><!--/row-->
</div><!--/.fluid-container-->

ベタに書くとこうなるんだけど、サイドバー描画の部分を外出しにしたい。
組込みテンプレートタグを使って分離する。


view/Application/index.html

<div class="container-fluid">
  <div class="row-fluid">
<!-- ここからサイドバー-->
    #{sidebar /}
<!-- ここまでサイドバー-->
    <div class="span9">
      <h1>Hello, world!</h1>
    </div><!--/span-->
  </div><!--/row-->
</div><!--/.fluid-container-->

view/tags/sidebar.html

<div class="span3">
  <div class="well sidebar-nav">
    <ul class="nav nav-list">
      <li class="nav-header">カテゴリ</li>
      #{list items:categories, as:'category'}
        <li>
          <a href="#">${category.name}</a>
        </li>
      #{/list}
    </ul>
  </div>
  <!--/.well -->
</div>
<!--/span-->

とやったところ、カテゴリ名が表示されない。

よくよくサンプルアプリ"yabe"を見直すと、

#{display post:frontPost, as:'home' /}

と書いてある。組み込みテンプレートタグには引数で渡すのかー。
ローカルでの変数名:渡し先での変数名、という書式らしい。

渡し元を編集。

#{sidebar categories:categories /}

まだ表示されない。
またまたサンプルを見ると、組み込みテンプレートタグ内では
"_"というプレフィックスが付いた変数が至る所にある。これか。


出たー!


これは分からん。規約なのかな。

サイトを見直すと
https://playdocja.appspot.com/documentation/1.2.5/tags#list

as パラメータもまたオプションです。デフォルト変数名として _ を使用します:

とかもあるし(Scalaっぽい)、まだまだ知らない書き方がありそう。