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


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

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

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

var foo = 0;

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

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

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

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

4 13

4 ответа:

Я бы пошел на один лучше и предоставил случай для условия {{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}}

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

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

Это отображает foo!, Когда foo является 0.

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

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

Если кто-то получает эту ошибку "ожидая ' ID', 'DATA', получил ' SEP '" с помощью метода @Shane убедитесь, что у вас нет пробелов в:

{{ /exist }}

И измените его следующим образом:

{{/exist}}