2011-11-13 14 views
12

Possiedo un oggetto con proprietà di tipo misto: alcune stringhe, alcuni array di stringhe, alcuni oggetti contenenti matrici di stringhe, che possono potenzialmente raggiungere molti livelli in profondità.iterazione ricorsiva su un oggetto nel modello Jade?

Vorrei eseguire un'iterazione su tutte le proprietà in modo che un oggetto crea un div, una matrice crea un div e una proprietà di stringa crea un'estensione per contenere il testo.

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

Lo scopo sopra renderebbe come:

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

Ma di solito molto più complesse strutture. Come devo fare per realizzare questo è Jade?

risposta

13

È passato un po 'di tempo da quando hai chiesto, ma mixin è tuo amico, penso. Non ho provato, ma se mixins supportano la ricorsione, questo dovrebbe funzionare:

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

Poi nel corpo del file .jade, chiamano mixin parseObject(rootObject).

+1

3rd party qui. Ho provato questo, ma il mixin non sembra gradire la ricorsione :( –

+0

@Robert Martin: È ora :) –

+0

Come il poster originale, ho aggiornato il tuo codice per includere 'mixin' (grazie ** 0x80 **) e i prefissi '-' appropriati. –

5

La ricorsione sembra essere supportata ora. Ho usato con successo la funzione con un piccolo aggiustamento; è necessario utilizzare la parola chiave mixin quando si chiama la funzione.

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

Nella versione moderna di Jade E 'apparire come

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

Poi nel corpo del file .jade, chiamare

+parseObject(rootObject)

Problemi correlati