Respostas:
A tag "each" também pode ter uma seção "else". Portanto, a forma mais simples é:
{{#each items}}
// render item
{{else}}
// render empty
{{/each}}
Se você tiver algo que deseja exibir uma vez e somente se a matriz tiver dados , use
{{#if items.length}}
//Render
{{/if}}
.length
retornará 0 para matrizes vazias, portanto, atingimos um valor real de falsey.
<ul>
tag uma vez e uma <li>
tag para cada item da lista. Se a lista estiver vazia, eu nem quero que o <ul>
renderize, e renderizar algo como <p>empty list<p>
dentro <ul>
dele não faz sentido.
[]
é avaliado como falso. A resposta do @Drejc é a resposta correta pela especificação do guidão.
Ok, é mais simples do que eu pensava:
{{#if items}}
// render items
{{#each items}}
// render item
{{/each}}
{{else}}
// render empty
{{/if}}
items
for uma matriz vazia (ou seja, tem um valor de []
), ela produzirá um valor verdadeiro. Considerando que items.length
produz um valor de falsey para uma matriz vazia. Veja a resposta de @ Duane .
if
, mas a documentação Handlebars é muito clara: 'Se seu argumento retornos false
, undefined
, null
, ""
, 0
, ou []
, guidão não vai tornar o bloco.' Eu deveria ter verificado os documentos primeiro.
Se você deseja verificar se uma coleção (cursor) está vazia ou não, as respostas anteriores não serão úteis. Em vez disso, você deve usar o count()
método:
{{#if items.count}}
<p>There is {{items.count}} item(s).</p>
{{else}}
<p>There is nothing</p>
{{/if}}
Para quem precisa usar um {{#each}} em cima de {{#if}} (ou seja, um loop if dentro de um loop for). Eles têm três listas diferentes de matrizes.
Usar uma pesquisa dentro de uma instrução if resolve o problema para mim. Como, as respostas acima não resolveram meu problema.
Aqui está o meu código,
{{#each OtherRandomItems}}
{{this}}
{{lookup ../AnotherRandomItems @index}}
{{#if (lookup ../RandomItems @index)}}
// render items
{{else}}
// render empty
{{/if}}
{{/each}}
#each
, como uma<ul>
tag (com<li>
s dentro), não deseja que o estado vazio seja quebrado pelo<ul>
.