Handlebars.js有一些奇怪的行为。它将值为true的布尔值作为字符串“true”呈现,但将值false呈现为“”。
var booleanTestTrue = true;
var booleanTestFalse = false;
模板:
True: {{booleanTestTrue}}
False: {{booleanTestFalse}}
呈现给:
True: true
False: (empty string)
有没有办法解决这个问题?或者我是否必须写一个帮手?
答案 0 :(得分:22)
您可以使用简单的块帮助程序并实现#if,如下所示:
{{#if isTrue}}
true
{{else}}
false
{{/if}}
答案 1 :(得分:6)
如果要打印字符串,则应传递字符串。
false.toString();
否则,是的,你需要一个帮助器(除非你使用#if
| #unless
助手输出一个字符串)。
另外,如果您想打印这些值以进行调试,请使用{{log booleanTestFalse}}
。
答案 2 :(得分:3)
我对此感到惊讶,最后为它写了一个简单的帮手:
Handlebars.registerHelper( 'toString', function returnToString( x ){
return ( x === void 0 ) ? 'undefined' : x.toString();
} );
然后您将按如下方式调用它:
True: {{toString booleanTestTrue}}
False: {{toString booleanTestFalse}}
在大多数情况下,只需return x.toString()
就可以逃脱。额外的检查可以避免尝试在未定义的值上调用toString
。
答案 3 :(得分:1)
我用过这个,类似于Barney的答案,但也支持null。
Handlebars.registerHelper('toString', function (v) {
return '' + v;
});
然后您将按如下方式调用它:
True: {{toString booleanTestTrue}}
False: {{toString booleanTestFalse}}
但是,如果v
是具有漂亮toString
方法的对象,则需要进行更多编码。