2010-02-07 15 views
64
#item 

crea un div con id = "elemento"¿Cómo puedo hacer identificadores dinámicos en Haml?

.box#item 

crea un div con la clase = "caja" y id = "elemento"

.box#="item "+x 

crea un div con la clase =" caja" y un comentario '# = 'elemento' + x'

.box# 
    ="item"+x 

lanza 'elementos ilegales: las clases y las identificaciones deben tener valores'.

¿Cómo obtengo el ID de una variable?

Respuesta

118

Hay dos maneras:

La forma en forma larga (define el id como si se tratara de un atributo regular):

.box{:id => "item_#{x}"} 

produce esto (x es lo que cada vez x.to_s evalúa a):

<div class="box" id="item_x"> 

La forma corta manera:

.box[x] 

produce la x siguiente suponiendo es una instancia de item:

<div class="box item" id="item_45"> 

Véase el HAML reference para más información.

+2

tuve que eliminar el espacio en blanco para que funcione: .box {: id => "item _ # {x}"} – jethroo

+0

¿cómo concatenar una cadena y una variable convertida por cadena en el método abreviado? Intenté '.box [" item "+ s]' y variantes sin éxito. ¿Es esa forma de acceso directo usando corchetes solo compatible con variables solamente? – ahnbizcad

+1

@gwho el método abreviado requiere que x sea una instancia del artículo. Usa el formulario de interpolación de cadena larga para lograr lo que estás buscando. .box {: id => "item # {s}"} – EmFi