将条件打开html元素转换为haml

时间:2014-05-17 15:33:42

标签: ruby-on-rails ruby haml

我想将以下erb转换为haml。

<% if content_for?(:sidebar) %>
  <div id="right-column" class="col-lg-2">
    <ul class="nav nav-pills nav-stacked content-bottom-padding">
      <%= yield :sidebar %>
    </ul>
  </div>
  <div id="left-column" class="col-lg-10 content-bottom-padding">
<% else %>
  <div class="col-lg-12 content-bottom-padding">
<% end %>
   LOADS OF CODE     
</div>

当然,你可以开始转换它:

- if content_for?(:sidebar)
  #right-column.col-lg-2
    %ul.nav.nav-pills.nav-stacked.content-bottom-padding= yield :sidebar
      #left-column.col-lg-10.content-bottom-padding
- else
  .col-lg-12.content-bottom-padding

但是在div中没有​​评估大块代码。那么如何解决这个DRY?

2 个答案:

答案 0 :(得分:2)

你能在部分内容中加入“代码加载”吗?

- if content_for?(:sidebar)
  #right-column.col-lg-2
    %ul.nav.nav-pills.nav-stacked.content-bottom-padding= yield :sidebar
  #left-column.col-lg-10.content-bottom-padding
    = render :partial => "loads_of_code"
- else
  .col-lg-12.content-bottom-padding
    = render :partial => "loads_of_code"

答案 1 :(得分:2)

部分标记输出是Haml不如erb有用的时间之一。这是一种可能性,只有在侧边栏内容时才将ID设置为left-column

-if content_for? :sidebar
  #right-column.col-lg-2
    %ul.nav.nav-pills.nav-stacked.content-bottom-padding=yield :sidebar
%div.col-lg-10.content-bottom-padding{id: content_for?(:sidebar) ? 'left-column' : ''}
  -# LOADS OF CODE

您还可以将LOADS OF CODE包含在部分内容中,并将其包含在每个代码下。

相关问题