Есть ли способ в шаблоне Handlebars.js проверить, является ли коллекция или список нулевым или пустым, прежде чем переходить и повторять список / коллекцию?
// if list is empty do some rendering ... otherwise do the normal
{{#list items}}
{{/list}}
{{#each items}}
{{/each}}
handlebars.js
Drejc
источник
источник
#each
, например<ul>
тег (с<li>
s внутри), вы не хотите, чтобы пустое состояние было заключено в оболочку<ul>
.Если у вас есть что-то, что вы хотите отобразить один раз и только если в массиве есть данные , используйте
.length
вернет 0 для пустых массивов, поэтому мы достигли реального ложного значения.источник
<ul>
тег один раз и<li>
тег для каждого элемента в списке. Если список пуст, я даже не хочу,<ul>
чтобы рендеринг был, а рендеринг чего-то другого, например,<p>empty list<p>
внутри<ul>
, не имеет смысла.[]
это оценивается как ложное. Ответ @Drejc - это правильный ответ по спецификации руля.Хорошо, это проще, чем я думал:
источник
items
это пустой массив (т.е. имеет значение[]
), он выдаст истинное значение. В то время какitems.length
производит ложное значение для пустого массива. См . Ответ @ Duane .if
, но документация Рули очень ясно:„Если его аргумент возвращаетсяfalse
,undefined
,null
,""
,0
, или[]
, Рули не делают блок.“ Я должен был сначала проверить документы.Если вы хотите проверить, пуста ли коллекция (курсор) или нет, предыдущие ответы не будут полезны, вместо этого вы должны использовать
count()
метод:источник
Для тех, кому нужно использовать {{#each}} поверх {{#if}} (т. Е. Цикл if внутри цикла for). Есть у них три разных списка массивов.
Использование поиска внутри оператора if решает проблему для меня. Поскольку приведенные выше ответы не решили мою проблему.
Вот мой код,
источник