2013-07-15 19 views
22

Handlebars.js presenta alcuni comportamenti strani. Rende un valore booleano con valore true come stringa "true", ma un valore false come "".Handlebars non esegue il rendering delle variabili booleane quando false

var booleanTestTrue = true; 
var booleanTestFalse = false; 

Template:

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

rende a:

True: true 
False: (empty string) 

C'è un modo per risolvere questo problema? O devo scrivere un aiutante?

+0

problema di repo qui: https://github.com/wycats/handlebars.js/issues/827 – bentael

risposta

6

Se si desidera stampare una stringa, è necessario passare una stringa.

false.toString(); 

In caso contrario, sì si avrebbe bisogno di un aiutante (a meno che non si utilizzano i #if | #unless aiutanti per l'uscita di una stringa).

Nota a margine, se si desidera stampare questi valori per scopi di debug, utilizzare {{log booleanTestFalse}}.

20

È possibile utilizzare un semplice aiutante blocco e implementare #if simile al seguente:

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

Sono rimasto sorpreso da questo, e finito per scrivere un semplice aiuto per esso:

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

È quindi invocarlo come segue:

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

Nella maggior parte degli scenari è possibile ottenere semplicemente return x.toString(). Il controllo extra evita il tentativo di chiamare toString su valori non definiti.

0

Ho usato questo, simile alla risposta di Barney ma supporta anche null.

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

Si potrebbe quindi richiama come segue:

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

Tuttavia, se v è un oggetto con un metodo di toString piuttosto è necessario fare di più di codifica.

Problemi correlati