Comment trouver la longueur du tableau dans les modèles de guidon?

86

J'ai un modèle Handlebars qui est rendu à l'aide d'un objet json. Dans ce json, j'envoie un tableau. Comme ça:

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}}

Impossible de le trouver dans la documentation de Handlebars.

Abhidev
la source

Réponses:

189

Ma faute....

{{array.length}}effectivement travaillé à l'intérieur du modèle. J'aurais dû le vérifier / le tester avant de le publier ici.

Abhidev
la source
36
eh bien, vous m'avez évité d'avoir à le tester, alors merci. :)
Perry Tew
8
Cela ne fonctionne pas du moins pour la saveur des guidons Mandrills pour quiconque se demande. Je n'ai pas encore trouvé de remplaçant approprié.
oneirois
43

Dans ce cas, vous devez référencer la variable parente de chacun à partir de chaque bloc:

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

Je pense que votre variable nommée "array" confond probablement également le problème. Supposons un JSON différent juste pour clarifier:

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

Alors faites ceci:

<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>
Kevin Powell
la source
1
Je pense que les éléments de la liste seraientapple 0 3 orange 1 3 banana 2 3
Paul
@Paul, vous avez raison, exemple mis à jour pour refléter la sortie correcte.
Kevin Powell
Question connexe: comment obtenir la longueur d'un tableau lorsqu'il s'agit de la valeur actuelle du pipeline?
Gyscos
Sur le plan syntaxique, cette réponse a plus de sens que la réponse acceptée.
Neil Monroe
2

Vous pouvez définir un assistant simple pour le gérer:

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

Et puis utilisez-le dans votre modèle, par exemple:

{{get_length some_object}}
gesiud
la source
1

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

{{#each blah as |blah|}}

{{else}}
 //   If array is empty
{{/each}}
Épirocks
la source