我想做这样的事情:
<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评估[]
是假的)。我尝试将条件更改为
{{#if items.count}}
然后我得到了神秘的错误
Unknown helper 'items'
那么,有没有办法在流星Handlebars模板中写出这样的条件?
答案 0 :(得分:32)
这是正确的方法:
<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使用的灵感来自Handlebars Spacebars。因此语法几乎相同。)
答案 1 :(得分:10)
通过使用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}}
。
答案 2 :(得分:5)
过去几周我一直在评估Handlebars,我遇到了类似的问题。对我有用的是读取length属性并添加else标记。
{{#if competitions.length}}
<div class="game-score span-4">
...code goes here...
</div>
{{else}}
{{> allGameNotes}}
{{/if}