Ручки #if и числовые нули

В моем шаблоне Handlebars я проверяю наличие переменной и выношу текст, если он есть:

{{#if foo}}
  some text
{{/if}}

Это отлично работает, если foo является текстом или если foo является числовым, но не равен нулю. Но если

var foo = 0;

то {{#if foo}} возвращает false.

Это, по-видимому, еще одна странность Javascript, потому что сам Javascript ведет себя одинаково. Однако в коде Javascript вы можете обойти это, проверив, является ли переменная "undefined".

Как я могу сделать то же самое в Handlebars?

Я мог бы написать помощника {{#exists}}, но я надеялся, что там что-то встроено.

Ответ 1

Я бы лучше подошел и предоставил случай для условия {{else}}...

/**
 * The {{#exists}} helper checks if a variable is defined.
 */
Handlebars.registerHelper('exists', function(variable, options) {
    if (typeof variable !== 'undefined') {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }
});

Теперь вы можете:

{{#exists myvar}}
  <p>Value of myvar is ... {{myvar}}</p>
{{else}}
  <p>Please supply a myvar</p>
{{/exists}}

Ответ 2

Для этого есть что-то построенное:

{{#if foo includeZero=true}}
    foo!
{{/if}}

При отображении foo! отображается foo 0.

Ответ 3

Я просто пошел вперед и написал помощника {{#exists}}. Но если у кого-то есть лучшее решение, отправьте его.

/**
 * The {{#exists}} helper checks if a variable is defined.
 */
Handlebars.registerHelper('exists', function(variable, options) {
    if (typeof variable !== 'undefined') {
        return options.fn(this);
    }
});

Ответ 4

Если кто-нибудь получит эту ошибку "Ожидание идентификатора", "ДАННЫЕ", получив "SEP", используя метод @Shane, убедитесь, что у вас нет пробелов:

{{ /exist }}

И измените его на это:

{{/exist}}