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.

War es hilfreich?

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)

http://handlebarsjs.com/block_helpers.html#conditionals

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}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top