2013-06-13 8 views
11

In meinem Lenker Vorlage ich für die Existenz einer Variablen überprüfen, und einen Text machen, wenn es da ist:Lenker #IF und numerische Nullen

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

Dies funktioniert gut, wenn foo Text ist oder wenn foo ist numerisch aber nicht Null. Aber wenn

var foo = 0; 

dann {{#if foo}} gibt false zurück.

Dies scheint eine weitere Javascript-Kuriosität zu sein, denn Javascript verhält sich auf die gleiche Weise. In JavaScript-Code können Sie dies jedoch umgehen, indem Sie prüfen, ob die Variable nicht definiert ist.

Wie kann ich das gleiche in Lenker?

Ich konnte einen {{#exists}} Helfer, schreiben, aber ich hatte gehofft, es in etwas gebaut wurde.

Antwort

16

ich würde man besser gehen und einen Fall, für den bieten {{else}} Bedingung ...

/** 
* 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); 
    } 
}); 

Jetzt können Sie haben:

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

Ich ging einfach weiter und schrieb eine {{}} #exists Helfer. Aber wenn jemand eine bessere Lösung hat, bitte posten Sie es.

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

Es ist etwas gebaut Dazu:

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

Dies zeigt 0 anwenn foo0 ist.

+0

Diese Funktion wurde im Oktober hinzugefügt: https://github.com/wycats/handlebars.js/issues/608, aber gut, um dies für zukünftige Besucher darauf hinweisen. –

+0

@JustusRomijn Deshalb habe ich es hinzugefügt. – albertjan

+0

@JustusRomijn danke für die Korrektur der Tippfehler :) – albertjan

0

Wenn jemand diesen Fehler bekommt "Erwartung 'ID', 'DATA' erwartet, 'SEP" mit @Shane Verfahren sicherstellen, dass Sie keine Leerzeichen in:

{{ /exist }} 

Und um dies zu ändern:

{{/exist}}