Helfer in der If -Block -In -Lenker -Vorlage rufen
-
27-10-2019 - |
Frage
Ich arbeite mit der Template Engine von Lenker.
{{#if itemSelected "SomeItem"}}
<div>This was selected</div>
{{/if}
wo itemSelected
ist ein registrierter Helfer wie diesen:
Handlebars.registerHelper("itemSelected", function(item) {
var selected = false;
// Lots of logic that determines if item is selected
return selected;
});
Ich bekomme Fehler, wenn ich versuche, diese Syntax für die Vorlage zu verwenden, und ich kann kein Beispiel finden, das so etwas zeigt. Ich sehe einfache #if -Blöcke wie diese ...
{{#if myValueInContext}}
<div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}
Aber ich kann nicht herausfinden, wie ich das erste Beispiel angehen soll. Vielleicht nähere ich mich dem falsch.
Übrigens habe ich diesen Schnurrbart getaggt, da ich der Frage kein Lenker -Tag hinzufügen konnte.
Lösung
Ich glaube nicht, dass dies funktionieren wird. Wenn ich die korrekte Lenkerdokumentation verstehe, ist das #IF selbst ein registrierter Blockhelfer und nimmt keinen anderen registrierten Helfer als Argument.
Nach der Dokumentation können Sie sie so implementieren
Handlebars.registerHelper('ifItemSelected', function(item, block) {
var selected = false;
// lots of logic that determines if item is selected
if(selected) {
return block(this);
}
});
Danach sollten Sie in der Lage sein, es anzurufen
{{#ifItemSelected SomeItem}}
This was selected
{{/ifItemSelected}
Aber Sie müssen sicherstellen EinigeiTem hat das richtige Format. Ich sehe keine Möglichkeit, einen registrierten Handler als bedingt in einem If-Statement zu verwenden.
Andere Tipps
Sie sollten Klammern um die eingebettete Helferberuf hinzufügen:
{{#if (itemSelected "SomeItem")}}
<div>This was selected</div>
{{/if}
Ich habe Experimente durchgeführt und verifiziert, dass es einfach funktioniert.
Ich bin mir nicht sicher, ob es in der Lenkerdokumentation erwähnt wird. Ich habe den Trick aus den Beispielen von gelernt Lenkerlayouts.
Mit der letzten Version (1.0.rc.1) der Lenker müssen Sie STH schreiben:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
});
dh. Block (this) wird durch options.fn (this)
Wenn Sie auch eine andere Option haben möchten, benötigen Sie diesen Code:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
else {
return options.inverse(this);
}
});
Benutzt mit:
{{#ifItemSelected SomeItem}}
This was selected
{{else}}
This was not selected
{{/ifItemSelected}