2011-11-13 13 views
12

Tengo un objeto de propiedades de tipo mixto, algunas cadenas, algunas matrices de cadenas, algunos objetos que contienen matrices de cadenas, que potencialmente pueden abarcar muchos niveles.¿Repetición recursiva sobre un objeto en la plantilla de Jade?

Me gustaría iterar sobre todas las propiedades para que un objeto cree un div, una matriz crea un div y una propiedad de cadena crea un span para contener el texto.

{ "string" : "some text", "object" : { "array" : [ "text" ] } } 

El objetivo anterior generaría lo:

<span>some text</span> 
<div> 
    <div> 
    <span>text</span> 
    </div> 
</div> 

Pero por lo general mucho más complejas estructuras. ¿Cómo debo lograr esto es Jade?

Respuesta

13

Ha pasado un tiempo desde que lo pidió, pero mixin es su amigo, creo. Yo no lo he probado, pero si mixins apoyan la recursividad, esto debería funcionar:

mixin parseObject(obj) 
    div 
    - each val, key in obj 
     - if (typeof val === 'string') 
     span #{val} 
     - else if (typeof val === 'object') 
     mixin parseObject(val) 

Luego, en el cuerpo de su archivo .jade, llaman mixin parseObject(rootObject).

+1

tercera fiesta aquí. Intenté esto, pero al mixin no parece gustarle la recursión :( –

+0

@Robert Martin: Ahora es :) –

+0

Como el póster original, he actualizado tu código para incluir 'mixin' (gracias ** 0x80 **) y los prefijos '-' apropiados. –

5

Recursion parece ser compatible ahora. He utilizado con éxito la función con un pequeño ajuste; necesita usar la palabra clave mixin cuando llama a la función.

mixin parseObject(obj) 
    div 
    each val, key in obj 
     if typeof val === 'string' 
     span #{val} 
     else if typeof val === 'object' 
     mixin parseObject(val) 
5

En la versión moderna de Jade ella es mirada como

mixin parseObject(obj) 
    div 
    each val in obj 
     if typeof val === 'string' 
     span= val 
     else if typeof val === 'object' 
     +parseObject(val) 

Luego, en el cuerpo de su archivo .jade, llame

+parseObject(rootObject)

Cuestiones relacionadas