Jawaban:
Tag "setiap" juga dapat mengambil bagian "lain". Jadi bentuk yang paling sederhana adalah:
{{#each items}}
// render item
{{else}}
// render empty
{{/each}}
Jika Anda memiliki sesuatu yang ingin Anda tampilkan sekali dan hanya jika array memiliki data , gunakan
{{#if items.length}}
//Render
{{/if}}
.length
akan mengembalikan 0 untuk larik kosong sehingga kita telah mencapai nilai palsu yang sebenarnya.
<ul>
tag sekali dan <li>
tag untuk setiap item dalam daftar. Jika daftarnya kosong, saya bahkan tidak ingin <ul>
merender, dan merender sesuatu yang lain seperti <p>empty list<p>
di dalam <ul>
tidak masuk akal.
Oke, ini lebih sederhana dari yang saya kira:
{{#if items}}
// render items
{{#each items}}
// render item
{{/each}}
{{else}}
// render empty
{{/if}}
items
sebuah array kosong (yaitu memiliki nilai []
), itu akan menghasilkan nilai yang benar. Sedangkan items.length
menghasilkan nilai falsey untuk larik kosong. Lihat jawaban @ Duane .
if
, tapi dokumentasi Setang sangat jelas: 'Jika yang argumen kembali false
, undefined
, null
, ""
, 0
, atau []
, Setang tidak akan membuat blok.' Seharusnya aku cek dokumennya dulu.
Jika Anda ingin memeriksa apakah sebuah koleksi (kursor) kosong atau tidak, jawaban sebelumnya tidak akan berguna, sebaliknya Anda harus menggunakan count()
cara:
{{#if items.count}}
<p>There is {{items.count}} item(s).</p>
{{else}}
<p>There is nothing</p>
{{/if}}
Untuk siapa saja yang perlu menggunakan {{#each}} di atas {{#if}} (yaitu loop if di dalam loop for). Apakah mereka memiliki tiga daftar larik yang berbeda.
Menggunakan pencarian di dalam pernyataan if memecahkan masalah untuk saya. Karena, jawaban di atas tidak menyelesaikan masalah saya.
Ini kode saya,
{{#each OtherRandomItems}}
{{this}}
{{lookup ../AnotherRandomItems @index}}
{{#if (lookup ../RandomItems @index)}}
// render items
{{else}}
// render empty
{{/if}}
{{/each}}
#each
, seperti sebuah<ul>
tag (dengan<li>
s di dalamnya), Anda tidak ingin keadaan kosong dibungkus oleh<ul>
.