14

我想做这样的事情:

<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>

itemsMeteor.cursor在哪里:

Template.list.items = function() {
  return Items.find();
};

但是,上面的代码不起作用,因为即使没有项目,条件也会积极评估(这有点令人惊讶,因为 Handlebars 评估[]为假)。我尝试将条件更改为

{{#if items.count}}

但后来我得到了神秘的错误

Unknown helper 'items'

那么,有没有办法在流星把手模板中编写这样的条件?

4

3 回答 3

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。所以语法几乎相同。)

于 2013-06-12T18:42:36.460 回答
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}}

于 2012-06-14T22:48:32.013 回答
5

过去几周我一直在评估 Handlebars,我遇到了类似的问题。对我有用的是读取长度属性并添加 else 标签。

    {{#if competitions.length}}
        <div class="game-score span-4"> 
        ...code goes here...    
        </div>
   {{else}}
        {{> allGameNotes}}
   {{/if}
于 2012-06-14T21:13:54.663 回答