【问题标题】:Convert conditional opening html elements into haml将条件打开的html元素转换为haml
【发布时间】:2014-05-17 15:33:42
【问题描述】:

我想把下面的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 呢?

【问题讨论】:

    标签: ruby-on-rails ruby haml


    【解决方案1】:

    部分标签输出是 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 包含在部分中,然后将其包含在每个标记下。

    【讨论】:

      【解决方案2】:

      您能否在部分中包含“LOADS OF CODE”?

      - 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"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 2011-04-19
        相关资源
        最近更新 更多