【问题标题】:How do I successfully interpolate Ruby inside the CSS attribute of a HAML %li HTML tag?如何在 HAML %li HTML 标记的 CSS 属性中成功插入 Ruby?
【发布时间】:2012-04-05 22:25:41
【问题描述】:

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

我正在将 ERB 模板转换为 HAML。 ERB 是:

<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 参考资料,专注于 this 部分:

您还可以使用 #{} 插值来插入复杂的表达式 在 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 上的第一个问题,所以如果我遗漏了一些有用的信息或违反了任何规则,请告诉我。

【问题讨论】:

    标签: ruby-on-rails css haml erb interpolation


    【解决方案1】:
    <li <%= link[:name] == @topic ? "class='active'" : "" %>>
    

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

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

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

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

    .item{:class => @item.is_empty? && "empty"}
    

    【讨论】:

    • 不知道如何奖励积分等。我的 CSS 没有显示活动类的原因主要是因为我的每个循环的缩进不足以从上面捕获两个类。我的插值版本是否仍然有效,还是您的语法必需?我确实要感谢您对 && 运算符的建议和教育!
    • 你的语法很好,但不太理想。
    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多