Come trovare la lunghezza dell'array all'interno dei modelli del manubrio?


87

Ho un modello Handlebars che viene reso utilizzando un oggetto JSON. In questo json invio un array. Come questo:

var json = {
               "array":["abc","def","ghi","jkl"] 
}

Ora nel mio modello voglio trovare la lunghezza di questo array. Qualcosa di simile a:

{{#each item}}
   {{ array.length }}
{{/each}}

Impossibile trovarlo nella documentazione dei manubri.

Risposte:


189

Colpa mia....

{{array.length}}effettivamente funzionato all'interno del modello. Avrei dovuto controllarlo / testarlo prima di pubblicarlo qui.


37
beh, mi hai salvato dal doverlo provare, quindi grazie. :)
Perry Tew

8
Questo non funziona almeno per il gusto Mandrills dei manubri per chiunque se lo chieda. Non ho ancora trovato un sostituto adatto.
oneirois

44

In questo caso è necessario fare riferimento alla variabile genitore di each dall'interno di each blocco:

{{#each array}}
    {{../array.length}}
{{/each}}

Penso che anche la tua variabile chiamata "array" stia confondendo il problema. Supponiamo che alcuni JSON diversi solo per chiarire:

var json = {
    "fruit":["apple","orange","banana"]
};

Quindi, facendo questo:

<ul>
    {{#each fruit}}
        <li>{{this}} {{@index}} {{../fruit.length}}</li>
    {{/each}}
</ul>

Produrrebbe:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>

1
Penso che le voci dell'elenco sarebberoapple 0 3 orange 1 3 banana 2 3
Paul,

@ Paul, hai ragione, esempio aggiornato per riflettere l'output corretto.
Kevin Powell

Domanda correlata: come si ottiene la lunghezza di un array quando è il valore della pipeline corrente?
Gyscos

Sintatticamente, questa risposta ha più senso della risposta accettata.
Neil Monroe

Questa è stata un'ottima risposta e dovrebbe essere scelta come quella corretta!
Aditya Rao

2

Puoi definire un semplice aiuto per gestirlo:

Handlebars.registerHelper('get_length', function (obj) {
 return obj.length;
});   

E poi usalo nel tuo modello, ad esempio:

{{get_length some_object}}

2

Se stai testando un elenco vuoto per visualizzare il contenuto ... In Ember.js che utilizza il manubrio, puoi avere un altro per #each.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.