2012-06-02 9 views
7

Me gustaría poder pasar un objeto con pares clave/valor que representan atributos para un elemento. ¿Es esto posible con Jade?Expandir un objeto para establecer atributos en Jade

Cualquier solución que me permita pasar una colección de atributos a mi plantilla sería suficiente, pero la capacidad de mezclar atributos explícitamente declarados con atributos extraídos de un objeto (como a continuación) sería ideal.

La siguiente sintaxis no funciona, es solo un ejemplo de lo que me gustaría hacer.

Por ejemplo, si pasaba esto:

{ 
    name:'username', 
    value:'bob', 
    attributes: { 
     maxlength: 16 
    } 
} 

Para esta plantilla:

input(name=name, value=value, attributes) 

La salida deseada sería:

<input name="username" value="bob" maxlength="16" /> 

Respuesta

5

Dado que usted es una parte de this issue en GitHub, probablemente ya sabe la respuesta. Sin embargo, para cualquier otra persona, aquí está la respuesta:

Jade:

input.foo(name=name value=value)&attributes(attrs) 

paso de estos datos a su función de render:

{ 
    name: 'username', 
    value: 'bob', 
    attrs: { 
     maxlength: 16 
    } 
} 

Salida:

<input name="username" value="bob" class="foo" maxlength="16"/> 
+2

Agradezco la respuesta. Esto ha estado aquí por un tiempo y honestamente había olvidado que estaba aquí. Como se señala en el problema de github: ** y los atributos no escapan a la salida, así que úselo con precaución ** – Prestaul

+0

Es bueno saberlo. No entendí eso. – Jonathan

0

lo necesario para pasar un objeto nombre o use la palabra clave 'global' de la siguiente manera:

partial('myview', { { 
    name:'username', 
    value:'bob', 
    attributes: { 
     maxlength: 16 
    } 
}, as: global }); 

de lo contrario, debe dar un nombre a su objeto y acceder a ellos a través de ese ámbito.

Check out the docs

+0

Esto no tiene' t, de cualquier manera, abordar el fondo de la cuestión. Estoy intentando descubrir cómo tomar un objeto que contiene una lista de atributos y aplicar esos atributos a una etiqueta en mi plantilla. P.ej. 'input (attributes)' donde atributos es un objeto con nombres de atributo como claves y valores de atributo como valores. No necesito cambiar el nombre 'locals'. – Prestaul

+0

disculpas Prestaul, he entendido mal la pregunta. Por favor, publique su respuesta si encuentra una. – jwerre

+0

Sin preocupaciones. Hará. – Prestaul

Cuestiones relacionadas