在每个偶数列的HAML中显示容器

时间:2013-10-15 08:12:19

标签: html conditional haml containers wrapper

我需要在HAML中渲染两列,以便最终输出为:

<div class='wrapper'>
  <div class='container'>
    <div class='left'>
      Some stuff's contents...
    </div>  
    <div class='right'>
      Some other stuff's contents...    
    </div>      
  </div>  
</div>

enter image description here

显然以下情况不起作用。

.wrapper
  - @stuff.each_with_index do | stuff, index |
    - if index % 2 == 0
      .container
        = render 'stuff_partial', :stuff => stuff
    - else
      = render 'stuff_partial', :stuff => stuff

我尝试使用HAML的环绕方法,但我不明白如何让两列嵌套内部条件?在HTML中,您只能为容器的开始和结束标记写两个条件,就是这样。 HAML中是否有任何方法可以做到这一点?

2 个答案:

答案 0 :(得分:1)

所以我找到了回答there的方向。答案是,

.wrapper
  - @stuff.each_slice(2) do | stuff |
    .container
      - stuffs.each_with_index do | stuff, index |
        - if index % 2 == 0
          = render 'stuff_partial', :locals => { :stuff => stuff, class => 'left' } 
        - else
          = render 'stuff_partial', :locals => { :stuff => stuff, class => 'right' } 

答案 1 :(得分:0)

如果您想使用环绕声标记,那么您必须这样做:

.wrapper
  - @stuff.each_with_index do | stuff, index |
    - surround(index % 2 ? "<div class='container'>" : "", index % 2 ? "</div>" : "") do
      = render 'stuff_partial', :stuff => stuff

然而,仅仅因为你能做到并不意味着你应该这样做。 HAML的两个声称的好处是易读性和保证它生成有效的HTML / XML。在这种情况下,您将介绍损害可读性的代码,并提供一个容易出错的机会来阻止您使用有效的HTML / XML。

我建议改为使用if语句并使用partials来减少重复。另一种方法是使用ERB代替,它允许您有条件地包含父元素。