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.

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.


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>

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

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}}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.