2013-06-13 14 views
11

Nel mio modello Manubrio ho verificare l'esistenza di una variabile, e il rendering del testo, se è lì:Manubrio #if e zeri numerici

{{#if foo}} 
    some text 
{{/if}} 

Questo funziona bene se foo è un testo o se foo è numerico ma non zero. Ma se

var foo = 0; 

poi {{#if foo}} restituisce false.

Questa sembra essere un'altra stranezza JavaScript, perché JavaScript si comporta allo stesso modo. Nel codice Javascript, tuttavia, è possibile aggirare il problema controllando se la variabile è "indefinita".

Come posso fare la stessa cosa in Handlebar?

potrei scrivere un {{#exists}} aiuto, ma speravo ci fosse qualcosa di costruito in.

risposta

16

vorrei andare ancora meglio e fornire un caso per la {{else}} condizione ...

/** 
* The {{#exists}} helper checks if a variable is defined. 
*/ 
Handlebars.registerHelper('exists', function(variable, options) { 
    if (typeof variable !== 'undefined') { 
     return options.fn(this); 
    } else { 
     return options.inverse(this); 
    } 
}); 

ora è possibile avere:

{{#exists myvar}} 
    <p>Value of myvar is ... {{myvar}}</p> 
{{else}} 
    <p>Please supply a myvar</p> 
{{/exists}} 
1

Ho appena andato avanti e ha scritto un {{}} #exists aiutante. Ma se qualcuno ha una soluzione migliore, per favore pubblicala.

/** 
* The {{#exists}} helper checks if a variable is defined. 
*/ 
Handlebars.registerHelper('exists', function(variable, options) { 
    if (typeof variable !== 'undefined') { 
     return options.fn(this); 
    } 
}); 
23

C'è qualcosa di costruito per questo:

{{#if foo includeZero=true}} 
    foo! 
{{/if}} 

Questo visualizza foo! quando foo è 0.

+0

Questa funzione è stata aggiunta nel mese di ottobre: ​​https://github.com/wycats/handlebars.js/issues/608, ma è utile segnalarlo ai visitatori futuri. –

+0

@JustusRomijn Ecco perché l'ho aggiunto. – albertjan

+0

@JustusRomijn grazie per aver corretto l'errore :) – albertjan

0

Se qualcuno ottiene questo errore "Expecting 'ID', 'DATA', ha ottenuto 'settembre'" usando il metodo @Shane assicurarsi di avere spazi in:

{{ /exist }} 

e modificarlo in questo modo:

{{/exist}}