Html 在每个偶数列上以HAML显示容器

Html 在每个偶数列上以HAML显示容器,html,conditional,haml,containers,wrapper,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>

我需要在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>

我试着使用HAML的环绕方法,但我不明白如何将两列嵌套在条件中?在HTML中,您只需要为容器的开始和结束标记编写两个条件,就是这样。HAML中有什么方法可以做到这一点吗?

如果您想使用环绕标签来实现这一点,您必须这样做:

.wrapper
  - @stuff.each_with_index do | stuff, index |
    - surround(index % 2 ? "<div class='container'>" : "", index % 2 ? "</div>" : "") do
      = render 'stuff_partial', :stuff => stuff
.wrapper
-@stuff.each_with_index do| stuff,index|
-环绕(索引%2?:“”,索引%2?:“”)是否执行
=呈现'stuff_partial',:stuff=>stuff
然而,仅仅因为你能做到这一点并不意味着你应该这样做。HAML声称的两个好处是易于阅读和保证生成有效的HTML/XML。在本例中,您引入了损害可读性的代码,并提供了一个容易出现错误的机会,使您无法使用有效的HTML/XML


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

因此我找到了答案的方向。答案是,

.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' } 
.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' }