Как сделать шаблон условным на основе размера коллекции?

Я хочу сделать что-то вроде этого:

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

Итак, есть ли способ написать такое условие в шаблоне руля метеора?

Ответы на вопрос(3)

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

Решение Вопроса

<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 uses Spacebars который вдохновлен рулями. Так что синтаксис почти одинаковый.)

 02 мар. 2016 г., 16:28
код OP не должен работать, если он объявил такие элементы:Template.list.helpers({ items: function() { return Items.find() } };
 02 мар. 2016 г., 18:31
Я так не думаю. Проблема, с которой он столкнулся, заключалась в том, что[] !== false

и у меня была похожая проблема. Для меня работало чтение свойства length и добавление тега else.

    {{#if competitions.length}}
        <div class="game-score span-4"> 
        ...code goes here...    
        </div>
   {{else}}
        {{> allGameNotes}}
   {{/if}
 Trevor Burnham15 июн. 2012 г., 00:45
Это не работает для меня. Я получаю ту же ошибку, что и при попытке использоватьcount, В этом случае это было быUnknown helper 'competitions'.

Ваш ответ на вопрос