我正在迭代一组项目并将它们显示在嵌套在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帮助器)
答案 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。