Câu trả lời:
Thẻ "mỗi" cũng có thể có phần "khác". Vì vậy, hình thức đơn giản nhất là:
{{#each items}}
// render item
{{else}}
// render empty
{{/each}}
Nếu bạn có thứ gì đó muốn hiển thị một lần và chỉ khi mảng có dữ liệu , hãy sử dụng
{{#if items.length}}
//Render
{{/if}}
.length
sẽ trả về 0 cho các mảng trống để chúng tôi đã đạt được giá trị falsey thực sự.
<ul>
thẻ một lần và <li>
thẻ cho từng mục trong danh sách. Nếu danh sách trống, tôi thậm chí không muốn <ul>
kết xuất và hiển thị một cái gì đó khác như <p>empty list<p>
bên trong <ul>
không có ý nghĩa.
[]
được đánh giá là sai. Câu trả lời của @Drejc là câu trả lời đúng theo thông số kỹ thuật của thanh điều khiển.
Ok nó đơn giản hơn tôi nghĩ:
{{#if items}}
// render items
{{#each items}}
// render item
{{/each}}
{{else}}
// render empty
{{/if}}
items
là một mảng trống (nghĩa là có giá trị []
), nó sẽ tạo ra một giá trị trung thực. Trong khi đó items.length
tạo ra một giá trị falsey cho một mảng trống. Xem câu trả lời của @ Duane .
if
, nhưng các tài liệu hướng dẫn tay lái là rất rõ ràng: 'Nếu nó trở về lập luận false
, undefined
, null
, ""
, 0
, hay []
, tay lái sẽ không làm cho khối.' Tôi nên đã kiểm tra các tài liệu đầu tiên.
Nếu bạn muốn kiểm tra xem một bộ sưu tập (con trỏ) có trống hay không, các câu trả lời trước sẽ không hữu ích, thay vào đó bạn phải sử dụng count()
phương thức:
{{#if items.count}}
<p>There is {{items.count}} item(s).</p>
{{else}}
<p>There is nothing</p>
{{/if}}
Đối với bất kỳ ai cần sử dụng {{#each}} trên đầu {{#if}} (tức là một vòng lặp if bên trong vòng lặp for). Là họ có ba danh sách khác nhau của mảng.
Sử dụng tra cứu bên trong câu lệnh if sẽ giải quyết vấn đề cho tôi. Như, các câu trả lời trên không giải quyết được vấn đề của tôi.
Đây là mã của tôi,
{{#each OtherRandomItems}}
{{this}}
{{lookup ../AnotherRandomItems @index}}
{{#if (lookup ../RandomItems @index)}}
// render items
{{else}}
// render empty
{{/if}}
{{/each}}
#each
, như một<ul>
thẻ (có<li>
s bên trong), bạn không muốn trạng thái trống được bọc bởi<ul>
.