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

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

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

<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 оценивает [] как falsey). Я попытался изменить условие на

{{#if items.count}}

но затем я получаю загадочную ошибку

Unknown helper 'items'

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

4b9b3361

Ответ 1

Это будет правильный путь:

<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 использует Spacebars, который вдохновлен Handlebars, поэтому синтаксис почти тот же.)

Ответ 2

Мне удалось заставить мой шаблон работать, используя 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}}.

Ответ 3

Я оценивал Handlebars в течение последних нескольких недель, и у меня была аналогичная проблема. Для меня работало чтение свойства length и добавление тега else.

    {{#if competitions.length}}
        <div class="game-score span-4"> 
        ...code goes here...    
        </div>
   {{else}}
        {{> allGameNotes}}
   {{/if}