HAML在循环中生成嵌套的div

时间:2015-03-22 16:56:12

标签: haml

有没有办法生成多个互相嵌套的div?

我希望打印像这样:

<div>
  <div>
    <div>
      <div>
        <div>
        </div>
      </div>
    </div>
  </div>
</div>

简单循环没有帮助

- (1..5).each do |i|
  %div

转到

<div></div>
<div></div>
<div></div>
<div></div>
<div></div>

1 个答案:

答案 0 :(得分:2)

在纯粹的haml中,没有任何方法可以通过设计来实现。

首先,问问自己:你真的需要这个吗?通常有更好的方法来实现您想要的结果。

在我的情况下,我需要根据我在外部给出的数字,对具有特定类的div进行任意嵌套。我将以下内容添加到我的rails帮助程序中:

  def nestify(css_class, level, &block)
    if level > 0
      content_tag(:div, class: css_class) { nestify(css_class, level - 1, &block) }
    else
      yield
      ""
    end
  end

然后,在你的haml中,你将它与块一起使用:

= nestify('each-div-has-this-class', 5) do
  Content for inner div.

[编辑]快速注释:我写了一会儿,记不起原因 - 但这段代码还没有准备就绪。 Ruby不适用于递归函数。请将其压平成一个循环,以获得更好的性能/可扩展性。