2012-09-07 44 views
5

Duplicar posible:
Append class if condition is true in Haml (with Rails)clara forma de probar condicionalmente si desea añadir una clase en la plantilla de HAML

estoy usando una plantilla que le permite marcar un elemento de lista como current (usando class=current), resaltándolo en una barra de navegación.

En HAML, esto se parece a:

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

tengo este código en una vista Sinatra y quiero agregar mediante programación el class=current, en función de un parámetro a la vista.

¿Cómo hago esto de la mejor manera posible?

Actualmente, estoy haciendo de esta manera:

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

¿Qué se siente demasiado prolijo.

Respuesta

17

Usted puede inline el condicional para determinar si se necesita la clase para el li%

%li{ :class => ('current' if section == "pages") } 
    %a{ :href => "#pages" } Pages 
+0

Gracias @mguymon, justo lo que estaba buscando –

+0

¿cómo se pueden usar múltiples If para diferentes clases por elemento con haml? – v3nt

+0

Lo ideal sería no meter todos los condicionales en línea, será feo y difícil de leer. En su lugar, crea la cadena de nombres de clase antes y pásala a la etiqueta haml. – mguymon

3

Si section puede ser otra cadena en lugar de "pages", usted debe usar algo como mguymon contestadas. Pero si sólo puede ser nil, false o "pages" este código es más sucinta:

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

Este uso del principio de que HAML omitir nil o false atributos y todos los objetos en Ruby se evalueted como true, excepto: false y nil .

lo tanto, si section es diferente de nil o false, entonces section && 'current' salidas 'current' de lo contrario salidas false omitiendo el atributo de clase.

+1

Gracias @ waldyr-ar, esto también es útil :) –

+1

@DanielMay ¡De nada! ¡Estamos aquí para eso! :) –

Cuestiones relacionadas