2012-10-25 3 views
10

Vorrei usare i baffi per rendere un elenco non ordinato HTML solo se un oggetto elenco non è vuoto. Quindi vorrei:Elenco di rendering dei baffi, se non vuoto

<ul> 
    <li>item 1</li> 
    <li>item 2</li> 
</ul> 

se la lista ha elementi e nulla se la lista è vuota (nemmeno i tag ul)

Come posso fare questo?

edit: la mia struttura dei dati è:

{ "list": ["first item", "second item"] } 
+0

Credo che questo sia quello che stai cercando per http://stackoverflow.com/questions/10102931/mustache-templates-how-to-output-a-block-only-once-for-non- empty-lists/10118092 # 10118092 – maxbeatty

+0

Questo è un approccio interessante, ma speravo che ci fosse un modo per farlo senza modificare la mia struttura dati –

+0

Potresti aggiungere la tua struttura dati alla tua domanda? – maxbeatty

risposta

5

È necessario riformattare lo struttura di dati a questo:

{ 
    "list": { 
     "items": ["first item", "second item"] 
    } 
} 

Il modello Baffi sarebbe ora questo

{{#list}} 
    <ul> 
     {{#items}} 
      <li>{{.}}</li> 
     {{/items}} 
    </ul> 
{{/list}} 

I fatto un video che spiega come funziona Mustache e come implementarlo usando sia PHP che JavaScript. Puoi trovarlo qui: http://mikemclin.net/mustache-templates-for-php-and-javascript/

+2

Sembra irragionevole chiedere alle persone di riformattare le proprie strutture dati per ospitare un modello linguaggio. – Alper

+1

Sono d'accordo. Ecco perché personalmente sceglierei un linguaggio modello diverso. Tuttavia, se si desidera utilizzare i baffi, questo è il modo. Mi piace la soluzione del brook, ma non sono sicuro che la proprietà 'length' sia sempre disponibile. Penso che potrebbe essere un miglioramento aggiunto dall'implementazione di Javascript. Non sono riuscito a trovarne alcuna menzione nel Manuale di Mustache: https://mustache.github.io/mustache.5.html. –

18

Se non si desidera o non è possibile riformattare i dati, è anche possibile controllare lo items.length prima di visualizzare i tag <ul>. Alcune persone disapprovano questo, ma è sicuramente un'alternativa alla risposta di Mike.

{{#items.length}} 
    <ul> 
     {{items}} 
      <li>{{property}}</li> 
     {{/items}} 
    </ul> 
{{/items.length}} 
+0

Oppure. Se si sta utilizzando la versione Java –

+0

Sto usando l'API di qualcun altro e non posso cambiarlo. '.length' funziona per me. –

+0

Ho appena provato questa soluzione su http://trymustache.com/ e ottengo il seguente errore: Errore di baffo: Sezione non chiusa "items.length" a 87 –