我想将以下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?
答案 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
包含在部分内容中,并将其包含在每个代码下。