4

1つずつではなく、リスト項目に基づいてトラバースする方法はありますか? フィールドのリストを 1,3,5,7,9 および 2,4,6,8 の順序でトラバースしたい。こんな感じで使ってみました

<#list section.field as field>
 <div class="col1">
 ${field.@label}:<input type="text"/></div>
 <#if field_has_next>
 <div class="col2">
   ${field[field_index+1].@label}:<input type="text"/>
 </div>
 </#if>
</#list>

しかし、それは私にエラーを与えました。

4

1 に答える 1

5

これは?chunkhttp://freemarker.org/docs/ref_builtins_sequence.html#ref_builtin_chunk)のためのものです:

<#list section.field?chunk(2) as row>
  <#list row as field>
    <div class="col${field_index + 1}">
      ${field.@label}: <input type="text"/>
    </div>
  </#list>
</#list>

そうしないと、ソリューションでどのようなエラーが発生するかわかりませんが、最後のフィールド以外のすべてのフィールドが 2 回表示されるというバグがあることは確かです。次のようなものでインデックスを自由に操作できます

<#assign fields = section.field>
<#assign idx = 0>
<#list 0..999999 as _>
   <#if idx == fields?size><#break></#if>
   ... even column ...
   <#assign idx = idx + 1>

   <#if idx == fields?size><#break></#if>
   ... odd column ...
   <#assign idx = idx + 1>
</#list>
...

しかし、ご覧のとおり、FreeMarker にはあまり適していません (非常に冗長です)。

于 2013-07-19T06:27:55.103 に答える