有条件地测试是否在HAML模板中添加类的简洁方法

时间:2012-09-07 05:09:08

标签: ruby views sinatra haml

  

可能重复:
  Append class if condition is true in Haml (with 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

感觉太冗长了。

2 个答案:

答案 0 :(得分:18)

您可以内联条件以确定%li

是否需要该类
%li{ :class => ('current' if section == "pages") }
  %a{ :href => "#pages" } Pages

答案 1 :(得分:3)

如果section可以是另一个字符串而不是"pages",则应使用mguymon之类的答案。但如果它只能是nilfalse"pages",则此代码更简洁:

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

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

因此,如果sectionnilfalse不同,则section && 'current'输出'current',否则输出false省略class属性