2013-07-15 5 views
22

Handlebars.jsには奇妙な動作があります。これは文字列 "true"として真の値を持ち、偽の値を ""として持つブール値を描画します。偽の場合、ハンドルバーはブール変数を描画しません。

var booleanTestTrue = true; 
var booleanTestFalse = false; 

テンプレート:

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

がにレンダリング:

True: true 
False: (empty string) 

この問題を解決する方法はありますか?それともヘルパーを書く必要がありますか?

+0

ここにレポの問題:https://github.com/wycats/handlebars.js/issues/827 – bentael

答えて

6

文字列を印刷する場合は、文字列を渡す必要があります。 (|出力に文字列を#unlessヘルパーあなたは#ifを使用しない限り)

false.toString(); 

そうでない場合は、ええ、あなたはヘルパーが必要になります。

これらの値をデバッグ目的で印刷する場合は、{{log booleanTestFalse}}を使用してください。

あなたは単純なブロックヘルパーを使用して、次のようなの#if実装することができます
20

{{#if isTrue}} 
     true 
{{else}} 
     false 
{{/if}} 
3

私はこれに驚き、そしてそれのために簡単なヘルパーを書いてしまった。

Handlebars.registerHelper('toString', function returnToString(x){ 
    return (x === void 0) ? 'undefined' : x.toString(); 
}); 

あなたは

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

ほとんどのシナリオでは、単純にで取り除くことができます。余分な検査は、未定義の値に対してtoStringを呼び出そうとするのを避ける。

0

これはBarneyの回答と同様ですが、nullもサポートしています。

Handlebars.registerHelper('toString', function (v) { 
    return '' + v; 
}); 

次のようにあなたはそれを呼び出します:

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

しかしvは、あなたがより多くのコーディングを行う必要があり、かなりtoStringメソッドを持つオブジェクトである場合。

関連する問題