Ответ 1
Вы можете использовать простой вспомогательный блок и реализовать #if, как показано ниже:
{{#if isTrue}}
true
{{else}}
false
{{/if}}
У Handlebars.js есть странное поведение. Он отображает логическое значение со значением true, как строка "true", но значение false как "".
var booleanTestTrue = true;
var booleanTestFalse = false;
Шаблон:
True: {{booleanTestTrue}}
False: {{booleanTestFalse}}
Относится к:
True: true
False: (empty string)
Есть ли способ исправить эту проблему? Или мне нужно написать помощника?
Вы можете использовать простой вспомогательный блок и реализовать #if, как показано ниже:
{{#if isTrue}}
true
{{else}}
false
{{/if}}
Если вы хотите напечатать строку, вы должны передать строку.
false.toString();
В противном случае вам понадобится помощник (если вы не используете помощники #if
| #unless
для вывода строки).
На стороне примечания, если вы хотите напечатать эти значения для цели отладки, используйте {{log booleanTestFalse}}
.
Я был удивлен этим, и в итоге написал для него простой помощник:
Handlebars.registerHelper( 'toString', function returnToString( x ){
return ( x === void 0 ) ? 'undefined' : x.toString();
} );
Затем вы вызываете его следующим образом:
True: {{toString booleanTestTrue}}
False: {{toString booleanTestFalse}}
В большинстве сценариев вы можете просто пропустить return x.toString()
. Дополнительная проверка позволяет избежать вызова toString
на значения undefined.
Я использовал это, как и ответ Барни, но также поддерживает значение null.
Handlebars.registerHelper('toString', function (v) {
return '' + v;
});
Затем вы вызываете его следующим образом:
True: {{toString booleanTestTrue}}
False: {{toString booleanTestFalse}}
Однако, если v
- это объект с симпатичным toString
методом, вам нужно сделать больше кода.