2017-05-16 4 views
1

をループしながら、現在の反復をDeterminigするのは、一例として、このテンプレートのビットを見てみましょう:様々なフレームワークでエリクサーはEEx:マップまたはコレクション

<%= if (length thread.posts) > 0 do %> 
    <%= for post <- thread.posts do %> 
     <%= for post <- thread.posts do %> 
      <%= render "post.html", post: post %> 
     <%= end %> 
    <% end %> 
<%= end %> 

あなたが最初の(または場合/現在のインデックス/反復をチェックすることができます最後に)、Elixir/Phoenixは同様の機能を提供していますか?例として、最初の反復で特定のテンプレートファイルをレンダリングしてから、他のすべての繰り返しに対して別のテンプレートファイルをレンダリングするとします。これを実行するにはベストプラクティスがありますか?

私は変数を現在の反復を追跡するように設定することを検討しましたが、Erlangの変数の不変な性質がこれを可能にするか、または望ましいものにするようには思われません。

答えて

4

Enum.with_indexはうまく機能

<%= if (length thread.posts) > 0 do %> 
    <%= thread.posts |> Enun.with_index |> Enum.map(fn {post, inx} -> %> 
     <%= for post <- thread.posts do %> 
      <%= render "post.html", post: post %> 
     <%= end %> 
    <% end) %> 
<%= end %> 

EDITあなたの元のコードに沿って、より多くのことには...

<%= if (length thread.posts) > 0 do %> 
    <%= for {post, inx} <- Enum.with_index(thread.posts) do %> 
     <%= for post <- thread.posts do %> 
      <%= render "post.html", post: post %> 
     <%= end %> 
    <% end %> 
<%= end %> 
+1

ありがとう! 'Enum.with_index'は私の場合には完全に機能します。 – nitomoe

関連する問題