Réponses:
La balise «each» peut également prendre une section «else». La forme la plus simple est donc:
{{#each items}}
// render item
{{else}}
// render empty
{{/each}}
Si vous avez quelque chose que vous souhaitez afficher une fois et seulement si le tableau contient des données , utilisez
{{#if items.length}}
//Render
{{/if}}
.length
renverra 0 pour les tableaux vides donc nous avons atteint une vraie valeur falsey.
<ul>
balise une fois et une <li>
balise pour chaque élément de la liste. Si la liste est vide, je ne veux même pas que le <ul>
rendu soit, et rendre quelque chose d'autre comme <p>empty list<p>
à l'intérieur de <ul>
n'a pas de sens.
[]
est évalué comme faux. La réponse de @Drejc est la bonne réponse par spécification du guidon.
Ok c'est plus simple que je ne le pensais:
{{#if items}}
// render items
{{#each items}}
// render item
{{/each}}
{{else}}
// render empty
{{/if}}
items
est un tableau vide (c'est-à-dire a une valeur de []
), il produira une valeur de vérité. Considérant que items.length
produit une valeur falsey pour un tableau vide. Voir la réponse de @ Duane .
if
, mais la documentation Guidons est très claire: « Si ses déclarations d'argument false
, undefined
, null
, ""
, 0
ou []
, guidons ne rendra pas le bloc. » J'aurais dû d'abord vérifier les documents.
Si vous voulez vérifier si une collection (curseur) est vide ou non, les réponses précédentes ne seront pas utiles, à la place vous devez utiliser la count()
méthode:
{{#if items.count}}
<p>There is {{items.count}} item(s).</p>
{{else}}
<p>There is nothing</p>
{{/if}}
Pour tous ceux qui ont besoin d'utiliser un {{#each}} au-dessus de {{#if}} (c'est-à-dire une boucle if dans une boucle for). Est-ce qu'ils ont trois listes différentes de tableaux.
Utiliser une recherche dans une instruction if résout le problème pour moi. Comme, les réponses ci-dessus n'ont pas résolu mon problème.
Voici mon code,
{{#each OtherRandomItems}}
{{this}}
{{lookup ../AnotherRandomItems @index}}
{{#if (lookup ../RandomItems @index)}}
// render items
{{else}}
// render empty
{{/if}}
{{/each}}
#each
, comme une<ul>
balise (avec<li>
s à l'intérieur), vous ne voulez pas que l'état vide soit enveloppé par le<ul>
.