2010-10-01 29 views
17

Estoy intentando escribir este html en haml para agregar una etiqueta de identificación si el elemento es el actual. Esto es para configurar el resaltado jquery.Establecer condicionalmente el ID del elemento HTML con HAML

<% if line_item == @current_item %> 
<tr class="line_item id="current_item"> 
<% else %> 
<tr class="line_item"> 
<% end %> 
    <td><%= line_item.quantity %>&times;</td> 
    <td><%= line_item.product.title %></td> 
    <td class="item_price"><%= number_to_currency(line_item.total_price) %></td> 
</tr> 

Porque no quiero escribir un método de ayuda, me he pegado la sentencia if dentro de la etiqueta:

%tr.line_item{ :id => (line_item == @current_item ? '' : 'current_item') } 
%td 
    = line_item.quantity 
%td 
    \x #{line_item.product.title} 
%td.item_price 
    = number_to_currency(line_item.total_price) 
%td.item_remove 
    = button_to 'Remove', line_item, :method => :delete 

Sin embargo, esta etiqueta de identificación de 'current_item' se queda con todo el artículos y no solo el actual. Esto da como resultado javascript que resalta la entrada incorrecta o completa. ¿Pensamientos sobre cómo hacer que haml coopere?

Respuesta

32

EHM señor, su condición es mal :-)

Debe ser

line_item == @current_item ? "current_item" : "" 

Hay una cosa que no es bonito - se termina con id="" para el descanso de los artículos. Pero hay una cura simple para ello:

%tr.lineitem{ :id => (line_item == @current_item ? "current_item" : nil)} 

Cuando regresa nil valor para un atributo HAML lo ignorará y no aparecerá en la salida.

+0

Gracias! Ojalá pudiera hacerlo más limpio – ScotterC

+0

¡Ese es el "" que me hizo sentir mal! :-) –

+0

la capacidad de usar nil para "ignorar" un atributo en HAML es un consejo excelente, ¡gracias por señalarlo! – jpwynn

5

Esto también funciona como una alternativa para la primera solución en la respuesta aceptada

= f.input_field :hello, disabled: (true unless SOME_CONDITION_HERE) 
+0

Esto es especialmente útil para atributos booleanos (como deshabilitado). –

0

Tomando @ respuesta de vladCovaliov en el contexto de la pregunta:

%tr.line_item{ id: (@current_item unless @current_item != line_item) } 
Cuestiones relacionadas