handlerbars.js listenin boş olup olmadığını kontrol edin


122

Handlebars.js şablonunda, listeye / koleksiyona gitmeden ve yinelemeden önce koleksiyonun veya listenin boş veya boş olup olmadığını kontrol etmenin bir yolu var mı?

// if list is empty do some rendering ... otherwise do the normal
{{#list items}}

{{/list}}



{{#each items}}

{{/each}}

Yanıtlar:


209

"Her" etiketi de bir "başka" bölümü alabilir. Yani en basit biçim şudur:

{{#each items}}
// render item
{{else}}
// render empty
{{/each}}

1
Harika, ama soruya cevap vermiyor. Bir etiketin #each, bir <ul>etiket gibi sarılmasını istiyorsanız (içinde <li>s ile ), boş durumun <ul>.
Leonardo Raele

236

Bir kez görüntülemek istediğiniz bir şey varsa ve yalnızca dizide veri varsa , şunu kullanın:

{{#if items.length}}
    //Render
{{/if}}

.length boş diziler için 0 döndürecektir, böylece gerçek bir falsey değerine ulaşmış oluruz.


1
Her iki cevap da doğru ve işe yarıyor ve soruyu cevaplıyorlar. Dizide veri yokken bir şeyin nasıl görüntüleneceği. Tersi değil.
Drejc

15
Hayır, katılıyorum, bu doğru cevap. For döngüsü içermez.
radtek

4
Basit durum: Listedeki her öğe için <ul>bir <li>etiket ve bir etiket oluşturmak istiyorum . Liste boşsa <ul>, render etmesini bile istemiyorum ve <p>empty list<p>içindeki gibi başka bir şeyi render etmek <ul>mantıklı değil.
Fuad Saud

2
Bu cevap uygulamaya özeldir. Docs gidonlar belirtmek []yanlış olarak değerlendirilir. @Drejc'in cevabı, gidon spesifikasyonuna göre doğru cevaptır.
Stim

1
teşekkürler dostum bu registerHelper'dan çok daha iyi bir çözüm.
Danimarkalı

38

Tamam, düşündüğümden daha basit:

{{#if items}}
// render items

{{#each items}}
// render item
{{/each}}

{{else}}
// render empty
{{/if}}

5
Eğer itemsboş bir dizi (yani bir değere sahiptir []), bir truthy değeri üretir. Oysa items.lengthboş bir dizi için yanlış bir değer üretir. @ Duane'nin cevabına bakın .
gfullam

Huh ... 3 yıl geçti o zamandan beri ... uygulama değişmiş olabilir veya bende basit bir [] dizisi durumu yoktu. Hatırladığım kadarıyla benim için işe yaradı.
Drejc

13
Haklısın. Ben önleme amaçlı olarak 'yerli JS davranışına göre yorumladı if, ama Gidon dokümantasyon çok açıktır: 'onun argüman döner ise false, undefined, null, "", 0, veya [], Gidon blok oluşturulamıyor.' Önce dokümanları kontrol etmeliydim.
gfullam

8

Bir koleksiyonun (imleç) boş olup olmadığını kontrol etmek istiyorsanız, önceki cevaplar kullanışlı olmayacaktır, bunun yerine count()yöntemi kullanmalısınız :

{{#if items.count}}
    <p>There is {{items.count}} item(s).</p>
{{else}}
    <p>There is nothing</p>
{{/if}}

2
@BasicWolf bunu yapmaz, saymak imleçle çalışır, bunun yerine dizi kullanım uzunluğunuz varsa.
Karl. S

Bu, bir dizi ve bir nesne arasında kontrol etmek ve onları farklı şekilde ele almak için harika çalışıyor.
Ryan Walton

2

{{#İf}} üzerine bir {{#each}} kullanması gereken herkes için (yani, for döngüsü içinde bir if döngüsü). Üç farklı dizi listesi var mı?

Bir if ifadesi içinde bir arama kullanmak sorunu benim için çözer. Yukarıdaki cevaplar sorunumu çözmedi.

İşte kodum

{{#each OtherRandomItems}}

  {{this}}

  {{lookup ../AnotherRandomItems @index}}

  {{#if (lookup ../RandomItems @index)}}
  // render items
  {{else}}
  // render empty
  {{/if}}

{{/each}}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.