有条件地开始一个新的表行

时间:2013-11-27 20:33:29

标签: ruby html-table haml

我正在尝试创建一个两列表。我想将一个项目的数据放入每个“列”中,因此我只想在项目数量均匀时开始一个新行。

所以我循环浏览一个项目列表,并在每次传递时推进计数器。当计数器%2 == 0时,我想开始一个新行(%tr)。

- items.each do |item|
  - if counter % 2  == 0
    %tr{class: "something"}
    %td= item[:value1]
    %td= item[:value2]
  - else
    %td= item[:value1]
    %td= item[:value2]
  - counter += 1

这几乎产生了预期的效果。我理解为什么第一个tr被创建,因为后续的td标签处于相同的标签深度。但是如果我将它们移动到相同的深度,那么只有前两个td标签被包装到第一行中,并且后续的tds被放入一个新行(可能是由浏览器)。将所有td标记缩进到同一级别,在if子句的两侧将导致HAML崩溃(不返回任何内容)。

 <tr class="something"></tr>
 <tr><td>1</td>
 <td>2</td>
 <td>3</td>
 <td>4>/td>
 </tr>

我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

自从我做完haml已经有一段时间了,但不应该这样做吗?

- items.each do |item|
  %tr{class: "something"}
    %td= item[:value1]
    %td= item[:value2]

这样%tr一次会自动封装两个%td

答案 1 :(得分:0)

您可以使用Enumerable#each_slice

- items.each_slice(2) do |sliced_items|
  %tr{class: "something"}
    - sliced_items.each do |item|
      %td= item[:value1]
      %td= item[:value2]
相关问题