检查模板助手返回的光标是否为空的最快方法?

Fastest way to check whether the cursor returned by a template helper is empty?

我经常做这样的事情,两次使用 items 助手:

{{#if items}}
<h1>Items</h1>
  {{#each items}}
    {{> item}}
  {{/each}}
{{/if}}

Template.foo.helpers
  items: ->
    Items.find 
      bar: true
    , 
      sort: created: -1
      transform: (item) ->
        i.good = true
        i

Meteor 是否在这种情况下做了额外的工作?将 if 切换为使用 areItems 之类的东西会更有效吗?

areItems: ->
  Items.find
    bar: true
  .count() > 0

您可以使用空格键的 #with 块标记来做您想做的事。

像这样:

{{#with items}}
  {{#if this.count}}<h1>Items</h1>{{/if}}
  {{#each this}}
    {{> item}}
  {{/each}}
{{/with}}

区块标签是documented here。相关报价是:

If the argument to #with is falsy (by the same rules as for #if), the content is not rendered.


更新:修复了所需行为的代码。此外,虽然我的示例演示了调用一个帮助程序,但更好的做法是制作一个 'itemList' 模板并使用 {{> itemList items}} 包含它。

您可以使用{{else}}

{{#each this}}
   {{> item}}
{{else}}
   <h1>No Items</h1>   
{{/each}}

使用#with#if this.length.fetch

{{#with items}}
  {{#if this.length}}
  <h1>Items</h1>
    {{#each this}}
      {{> item}}
    {{/each}}
  {{/if}}
{{/with}}

Template.foo.helpers
  items: ->
    Items.find 
      bar: true
    , 
      sort: created: -1
      transform: (item) ->
        i.good = true
        i
    .fetch()

在模板中,您可以使用 {{#with items}} 然后 'this.count' 或 'this.length' 检查您的助手是否返回了任何项目。

如果 'items' 是游标,则使用 this.count,例如find() 操作的结果:

{{#with items}}
  {{#if this.count}}
    <h1>Items</h1>
    {{#each this}}
      {{> item}}
    {{/each}}
  {{/if}}
{{/with}}

如果 'items' 是数组,则使用 this.length:

{{#with items}}
  {{#if this.length}}
    <h1>Items</h1>
    {{#each this}}
      {{> item}}
    {{/each}}
  {{/if}}
{{/with}}

我发现 {{#if items.count}} 就足够了。

{{#if items.count}}
  <h2>Below there are items</h2>
{{/if}}

{{#each items}}
  <div class="item-name">{{this.name}}</div>
{{else}}
  <h2>There are no items</h2>
{{else}}