3

长期聆听者,第一次来电者。我是芝加哥 Code Academy 的 6 个月大的开发人员,我已经在这个问题上停留了几个小时。在此之前,我感谢您的所有帮助和时间。

我正在将 ERB 模板转换为 HAML。再培训局是:

<ul class="nav nav-list">
  <li class="nav-header">
    <%= navigation_header %>
  </li>
  <% @navigation_links.each do |link| %>
  <% if link[:name].present? %>
    <li <%= link[:name] == @topic ? "class='active'" : "" %>>
      <%= link_to link[:name], link[:url] %>
    </li>
  <% else %>
    <hr />
  <% end %>
  <% end %>
</ul>

我遇到问题的 ERB 行是:

<li <%= link[:name] == @topic ? "class='active'" : "" %>>

我已经测试了许多变体,尽可能多地阅读 HAML 参考资料,并专注于节:

您还可以使用 #{} 插值在 HTML 样式的属性中插入复杂的表达式:

%span(class="widget_#{@widget.number}")

...并搜索了 Google & StackOverflow,但我无法得到正确的输出;HAML 一直无视内联 CSS。经过我所有的基础工作,我对这个版本非常有信心,但它没有奏效:

- @navigation_links.each do |link|
  - if link[:name].present?
    %li{ :class => "#{ link[:name] == @topic ? "active" : ""}" }
      = link_to link[:name], link[:url]
  - else
    %hr

我也尝试过 :erb 过滤器,但无济于事:

%ul.nav.nav-list
  %li.nav-header
    = navigation_header
- @navigation_links.each do |link|
  - if link[:name].present?
    :erb
      <li <%= link[:name] == @topic ? "class='active'" : "" %>>
    = link_to link[:name], link[:url]
  - else
    %hr

而且我还尝试了一个 :css 过滤器,但是失败了。

有什么想法可能是错的吗?这是我在 StackOverflow 上的第一个问题,所以如果我遗漏了一些有用的信息或违反了任何规则,请告诉我。

4

1 回答 1

7
<li <%= link[:name] == @topic ? "class='active'" : "" %>>

您不需要变量插值。这很容易转换为 HAML,如下所示:

%li{:class => (link[:name] == @topic) && "active"}
%li{:class => (link[:name] == @topic) ? "active" : "" }

在您完全包含或省略该值的情况下,首选第一个。来自HAML 文档

如果指定了单个值并且其计算结果为 false,则将其忽略;否则它将被转换为字符串。例如:

.item{:class => @item.is_empty? && "empty"}
于 2012-04-05T22:27:35.463 回答