Как сделать шаблон условным на основе размера коллекции?
Я хочу сделать что-то вроде этого:
<template name="list">
<ul>
{{#if items}}
{{#each items}}
<li>{{itemContents}}</li>
{{/each}}
{{else}}
<li class="placeholder">There are no items in this list.</li>
{{/if}}
<ul>
</template>
где items
- Meteor.cursor:
Template.list.items = function() {
return Items.find();
};
Однако приведенный выше код не работает, поскольку условие будет оцениваться положительно, даже если нет элементов (что слегка удивительно, потому что Handlebars оценивает []
как falsey). Я попытался изменить условие на
{{#if items.count}}
но затем я получаю загадочную ошибку
Unknown helper 'items'
Итак, есть ли способ написать такое условие в шаблоне Handelebars для метеор?
Ответы
Ответ 1
Это будет правильный путь:
<template name="list">
<ul>
{{#each items}}
<li>{{itemContents}}</li>
{{else}}
<li class="placeholder">There are no items in this list.</li>
{{/each}}
<ul>
</template>
Для получения дополнительной информации см. handlebarsjs.com.
(Meteor использует Spacebars, который вдохновлен Handlebars, поэтому синтаксис почти тот же.)
Ответ 2
Мне удалось заставить мой шаблон работать, используя with
, чтобы изменить контекст оценки:
<template name="list">
<ul>
{{#with items}}
{{#if count}}
{{#each this}}
<li>{{itemContents}}</li>
{{/each}}
{{else}}
<li class="placeholder">There are no items in this list.</li>
{{/if}}
{{/with}}
<ul>
</template>
Обратите внимание на измененные выражения {{#if count}}
и {{#each this}}
.
Ответ 3
Я оценивал Handlebars в течение последних нескольких недель, и у меня была аналогичная проблема. Для меня работало чтение свойства length и добавление тега else.
{{#if competitions.length}}
<div class="game-score span-4">
...code goes here...
</div>
{{else}}
{{> allGameNotes}}
{{/if}