99 votes

Comment trouver la longueur d'Array dans les gabarits du guidon ?

J'ai un modèle Handlebars qui est rendu en utilisant un objet json. Dans ce json, j'envoie un tableau. Comme ceci :

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

Maintenant, dans mon modèle, je veux trouver la longueur de ce tableau. Quelque chose comme :

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

Je ne l'ai pas trouvé dans la documentation de Handlebars.

211voto

Abhidev Points 1976

Mon mauvais....

{{array.length}} a effectivement travaillé dans le modèle. J'aurais dû le vérifier/tester avant de le poster ici.

47voto

Kevin Powell Points 546

Dans ce cas, vous devez faire référence à la variable parent de la variable each à l'intérieur du bloc each :

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

Je pense que le fait que votre variable soit nommée "array" est probablement aussi une confusion. Supposons un JSON différent, juste pour clarifier :

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

Donc, en faisant ça :

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

Céderait :

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

2voto

gesiud Points 86

Vous pouvez définir des aides simples pour les gérer :

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

Et ensuite l'utiliser dans votre modèle, par exemple :

{{get_length some_object}}

2voto

Epirocks Points 370

Si vous testez pour une liste vide afin d'afficher du contenu... Dans Ember.js qui utilise des guidons, vous pouvez avoir un else pour le #each.

{{#each blah as |blah|}}

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

0voto

Amrendra Points 1114

Essayez ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X