Ручки #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}}