当false时,Handlebars不会呈现布尔变量

时间:2013-07-15 21:31:32

标签: handlebars.js

Handlebars.js有一些奇怪的行为。它将值为true的布尔值作为字符串“true”呈现,但将值false呈现为“”。

var booleanTestTrue = true;
var booleanTestFalse = false;

模板:

True: {{booleanTestTrue}}
False: {{booleanTestFalse}}

呈现给:

True: true
False: (empty string)

有没有办法解决这个问题?或者我是否必须写一个帮手?

4 个答案:

答案 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方法的对象,则需要进行更多编码。