¿Cómo encontrar la longitud de la matriz dentro de las plantillas del manillar?

86

Tengo una plantilla de manubrios que se representa con un objeto json. En este json estoy enviando una matriz. Me gusta esto:

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

Ahora en mi plantilla quiero encontrar la longitud de esta matriz. Algo como:

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

No se pudo encontrar en la documentación de Handlebars.

Abhidev
fuente

Respuestas:

189

Culpa mía....

{{array.length}}realmente trabajó dentro de la plantilla. Debería haberlo comprobado / probado antes de publicarlo aquí.

Abhidev
fuente
37
bueno, me salvaste de tener que probarlo, así que gracias. :)
Perry Tew
8
Esto no funciona al menos para el tipo de manubrio Mandrills para cualquiera que se esté preguntando. Todavía no he encontrado un reemplazo adecuado.
oneirois
43

En este caso, debe hacer referencia a la variable principal de cada desde dentro de cada bloque:

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

Creo que su variable que se llama "matriz" probablemente también está combinando el problema. Asumamos un JSON diferente solo para aclarar:

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

Entonces haciendo esto:

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

Rendiría:

<ul>
    <li>apple 0 3</li>
    <li>orange 1 3</li>
    <li>banana 2 3</li>
</ul>
Kevin Powell
fuente
1
Creo que los elementos de la lista seríanapple 0 3 orange 1 3 banana 2 3
Paul
@Paul, tienes razón, ejemplo actualizado para reflejar la salida correcta.
Kevin Powell
Pregunta relacionada: ¿cómo se obtiene la longitud de una matriz cuando es el valor actual de la canalización?
Gyscos
Sintácticamente, esta respuesta tiene más sentido que la respuesta aceptada.
Neil Monroe
2

Puede definir un ayudante simple para manejarlo:

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

Y luego úselo en su plantilla, por ejemplo:

{{get_length some_object}}
gesiud
fuente
1

Si está probando una lista vacía para mostrar contenido ... En Ember.js, que usa manubrios, puede tener otro para #each.

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Epirocks
fuente