私は、独自の色とサイズのサーバーを介して50個のランダムな四角形のdivを動的に生成するPhoenixテンプレートを持っています。これを行うために、私はループを実行し、1-100の乱数を割り当て、その数に対して演算を実行します。不要なHTML(フェニックス)をレンダリングする列挙割り当て
ランダムクラスにインラインで<div class="<%=Enum.random(['class-1','class-2'...]) %>"
のようなものを割り当てるだけで、外部変数を参照したいとしましょう。
マイテンプレートコードは次のようになります。
<section id="my-section">
<%= for x <- 1..50 do %>
<%= myrandom = Enum.random(1..100)
colorClass = cond do
myrandom < 2 ->
"color-red"
myrandom < 10 ->
"color-orange"
myrandom < 25 ->
"color-yellow"
myrandom < 50 ->
"color-green"
true ->
"color-blue"
end
sizeClass = cond do
rem(myrandom, 5) == 0 ->
"size-1"
rem(myrandom, 5) == 1 ->
"size-2"
rem(myrandom, 5) == 2 ->
"size-3"
rem(myrandom, 5) == 3 ->
"size-4"
rem(myrandom, 5) == 4 ->
"size-5"
end
%>
<div class="square <%=colorClass %> <%=sizeClass %>"></div>
<% end %>
</section>
結果のHTMLは次のようになります。
<section id="my-section">
size-3
<div class="square color-yellow size-3"></div>
size-2
<div class="square color-blue size-2"></div>
size-3
<div class="square color-blue size-3"></div>
size-4
<div class="square color-blue size-4"></div>
...
div
が生成される前に何とかsizeClass
変数は、インラインでレンダリングされています。副作用なしにこれを行うにはどうすればよいですか?
よく機能します。何らかの理由で、私はまだ '<'% 'のために '='が必要です。なぜでしょうか? –
これは、 'for'の中で生成されたHTMLをページに挿入したいからです。これがなければ、 'for'の中のHTMLである' for'の戻り値は無視されます。 – Dogbert