Ответ 1
В теге "каждый" также может быть раздел "else". Итак, самая простая форма:
{{#each items}}
// render item
{{else}}
// render empty
{{/each}}
Есть ли способ в шаблоне Handlebars.js проверить, является ли коллекция или список пустой или пустой, перед тем, как идти и итерировать через список/коллекцию?
// if list is empty do some rendering ... otherwise do the normal
{{#list items}}
{{/list}}
{{#each items}}
{{/each}}
В теге "каждый" также может быть раздел "else". Итак, самая простая форма:
{{#each items}}
// render item
{{else}}
// render empty
{{/each}}
Супер опоздал на вечеринку, но мне не нравится принятый ответ (что, если у меня есть что-то, чтобы отображать один раз, но только если у массива есть данные?), и второй ответ не кажется мне функциональным. Возможно, это поможет некоторым будущим разработчикам.
{{#if items.length}}
//Render
{{/if}}
.length возвращает 0 для пустых массивов, чтобы мы достигли реального значения false.
Хорошо, это проще, чем я думал:
{{#if items}}
// render items
{{#each items}}
// render item
{{/each}}
{{else}}
// render empty
{{/if}}
Если вы хотите проверить, является ли коллекция (курсор) пустой или нет, предыдущие ответы не будут полезны, вместо этого вы должны использовать метод count()
:
{{#if items.count}}
<p>There is {{items.count}} item(s).</p>
{{else}}
<p>There is nothing</p>
{{/if}}
Для тех, кто должен использовать {{#each}} поверх {{#if}} (т.е. цикл if внутри цикла for). Есть ли у них три разных списка массивов.
Использование поиска внутри оператора if решает проблему для меня. Как, вышеупомянутые ответы не решили мою проблему.
Вот мой код,
{{#each OtherRandomItems}}
{{this}}
{{lookup ../AnotherRandomItems @index}}
{{#if (lookup ../RandomItems @index)}}
// render items
{{else}}
// render empty
{{/if}}
{{/each}}