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っぽい)、まだまだ知らない書き方がありそう。