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.