6

可能重复:
如果在 Haml 中条件为真,则附加类(使用 Rails)

我正在使用一个模板,该模板允许您将列表项标记为current(使用class=current),并在导航栏中突出显示它。

在 HAML 中,这看起来像:

%li.current
  Menu item A
%li
  Menu item B
%li
  Menu item C

我在 Sinatra 视图中有此代码,并希望以编程方式添加class=current,具体取决于视图的参数。

我如何以最简洁的方式做到这一点?

目前,我正在这样做:

  - if section == "pages"
    %li.current
      %a{:href => "#pages"} Pages
  - else
    %li
      %a{:href => "#pages"} Pages

感觉太冗长了。

4

2 回答 2

18

您可以内联条件以确定 %li 是否需要该类

%li{ :class => ('current' if section == "pages") }
  %a{ :href => "#pages" } Pages
于 2012-09-07T05:12:16.253 回答
3

如果section可以是另一个字符串而不是"pages",您应该使用类似mguymon回答的内容。但如果只能是nilfalse或者"pages"这段代码更简洁:

%li{ class:section && 'current' }
  %a{ :href => "#pages" } Pages

这使用了 HAML 省略nilfalse属性的原则,并且 Ruby 中的每个对象都被评估为true,除了:falsenil

因此,如果sectionnilor不同false,则section && 'current' 输出'current'else 它输出false省略类属性。

于 2012-09-07T05:25:58.270 回答