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

时间:2015-01-04 05:10:52

标签: meteor meteor-blaze

我经常这样做,使用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

5 个答案:

答案 0 :(得分:9)

您可以使用{{else}}

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

答案 1 :(得分:6)

在模板中,您可以使用{{#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}}

答案 2 :(得分:1)

使用#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()

答案 3 :(得分:0)

你可以使用空格键做你想做的事情。 #with阻止标记。

像这样:

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

块标记为documented here。相关的引用是:

  

如果#with的参数是假的(与#if的规则相同),则不会呈现内容。


更新:修复所需行为的代码。另外,虽然我的示例演示了一个帮助调用,但更好的做法是制作一个&#39; itemList&#39;模板并使用{{&gt; itemList items}}。

答案 4 :(得分:0)

我发现只需{{#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}}