今回はtemplate。
だいぶ前回と被るので、短いです。
Template
今までも出てきたeexのこと。
単純な変数埋め込みや関数呼び出しは前回出ましたね。
繰り返し
templates/page/index.eex
<%= for key <- connection_keys(@conn) do %>
<p><%= key %></p>
<% end %>
こんな感じで繰り返しが可能。
注意したいのは、key参照時に"@"がついていないこと。
どうやら以下っぽい。
- reder時に渡された変数への参照 -> @をつける
- template内で宣言された変数への参照 -> @不要
rendering chain
templates/page/index.eex
<%= for key <- connection_keys(@conn) do %>
<p><%= render(HelloWeb.SharedView, "key.html", key: key) %></p>
<% end %>
template内から他のtemplateをrender出来る。
前回の説明通り、単なるマークアップの埋め込みではなく、Viewの1関数としてのtemplateを埋め込める。
関数呼び出しなので、呼び出し元と呼び出された側でちゃんとスコープが分かれているのも良いポイント。
呼び出すtemplateは同一Viewに限らず、別Viewも可能。(同一Viewなら第1引数は省略可能
なので共通パーツとしてのView+eexを用意することも出来る(Layoutがこれに該当するか)
これ、だいぶ便利そうなのだが実際どのレベルでtemplateって分けてるんだろう。
jsの世界ではatomic designとかあったりするけど、同じ考え方をしたほうがよいのだろうか・・・?