有条件地关闭HAML中的标签

时间:2012-02-12 22:20:28

标签: haml

我正在迭代一组项目并将它们显示在嵌套在div中的列表中。目标是每天都有一个div,每个div中显示当天的项目。

我如何在HAML中执行此操作?我不认为我可以(或应该)有条件地关闭并创建一个像erb中那样的新标签。

我试过了:

- @items.each do |item|
  - if item date is diff from previous make a new container
    .container
      %h2 #{item.date}
      = yield_content :display_item item
  - else
    = yield_content :display_item item

但这会产生以下结果:

<div class="container">
<h2>01/28/2012</h2>
      <ul>
            <li>
              ... item
        </li>
      </ul>
</div>
        <li>
        ...item
      </li>

但我希望同一个div中的其他项目。 我正在使用ruby,sinatra(包括content_for帮助器)

1 个答案:

答案 0 :(得分:9)

答案是使用更多更好的Ruby:)

- @items.group_by(&:date).each do |date,items|
  .container
    %h2= date
    - items.each do |item|
      = yield_content :display_item item

有关详细信息,请参阅Enumerable#group_by文档。

可以 close and re-open the containers and headers as you were thinking,但这是一个可怕的,难以维护的黑客,我建议反对。拥抱Ruby和Haml的优雅;不要像使用ERB那样写Haml。