Handlebars.js: Variablen in Vorlage zuweisen

Erstellt am 29. März 2013  ·  11Kommentare  ·  Quelle: handlebars-lang/handlebars.js

Ist es möglich, eine Variable innerhalb einer Vorlage zuzuweisen und sie wie externe Variablen zu verwenden?

Beispiel:
Ich möchte eine Tabelle ausgeben, aber 1 Spalte ist optional, hängt davon ab, ob Daten (fields[].field2) vorhanden sind oder nicht.

In jeder Zeile ist es kein Problem, sie zu überprüfen, aber wie kann man sie auf die Kopfzeile überprüfen?

<table>
  <thead>
    <tr>
      <th>Head 1</th>
      <th>Head 2 (optional)</th>
      <th>Head 3</th>
    </tr>
  </thead>
{{#each fields}}
  <tr>
    <td>{{{field1}}}</td>
    {{#if field2}}<td>{{{filed2}}}</td>{{/if}}
    <td>{{{field3}}}</td>
  </tr>
{{/each}}
</table>

Im Moment verwende ich eine instabile Hilfsfunktion "assign", die Helfer erstellt.

{{#each fields}}
  {{#if field2}}
    {{assign "helperVar" "<th>Head 2 (optional)</th>"}}
  {{/if}}
{{/each}}

Output with: {{{helperVar}}}

Aber das ist keine gute Lösung und ich kann es nicht in #if verwenden.

Hilfreichster Kommentar

:+1:

@kpdecker Wir können Schleifen, if-Anweisungen und eine Reihe anderer logischer Konstrukte in Vorlagen haben. Aber anscheinend ist das Zuweisen einer Variablen _zu_ viel Logik in Templates? Ich verstehe wirklich nicht die Gründe für diese Entscheidung, wenn die anderen Standardhelfer viel mehr Logik enthalten, als nur die Möglichkeit zu haben, eine Variable zuzuweisen.

Alle 11 Kommentare

Dies widerspricht der Prämisse von logischen Vorlagen, und ich denke nicht, dass dies ein Konstrukt auf Sprachebene sein sollte.

Ich denke, der empfohlene Ansatz wäre hier, diese Daten in Ihrer Kontexterstellungslogik zu berechnen und an die Vorlage zu übergeben. Dies ermöglicht viel mehr Kontrolle, da Ihnen die vollständige Javascript-Sprache zur Verfügung steht und nicht die Teilmenge, die in der Vorlagensprache implementiert ist.

template({
  fields: fields,
  hasField2: _.any(fields, function(item) { return item.field2; })
});

Ich denke, dies wäre eine gute Funktion, nicht um mehr Logik in die Vorlage einzuführen, sondern um Variablen zu übergeben, die für diese Vorlage spezifisch sind.

Zum Beispiel verwenden 2 meiner Vorlagen denselben Teilton. Ich möchte in der Lage sein, einige Variablen von der Template-Ebene an dieses Partial zu übergeben, damit im Rahmen des Partials verschiedene Dinge für die verschiedenen Templates ausgegeben werden.

+1

+1

:+1:

:+1:

@kpdecker Wir können Schleifen, if-Anweisungen und eine Reihe anderer logischer Konstrukte in Vorlagen haben. Aber anscheinend ist das Zuweisen einer Variablen _zu_ viel Logik in Templates? Ich verstehe wirklich nicht die Gründe für diese Entscheidung, wenn die anderen Standardhelfer viel mehr Logik enthalten, als nur die Möglichkeit zu haben, eine Variable zuzuweisen.

+1

+1

+1

+1

Etwas in dieser Richtung kann mit Blockparametern implementiert werden und ist hier dokumentiert:
http://handlebarsjs.com/block_helpers.html#block -params

Da dies in einem separaten Namespace außerhalb des aktuellen Kontexts erfolgt, bietet es ein konsistenteres Verhalten gegenüber der Kontextzuweisung.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

nknapp picture nknapp  ·  3Kommentare

sontek picture sontek  ·  3Kommentare

DylanPiercey picture DylanPiercey  ·  7Kommentare

fcpauldiaz picture fcpauldiaz  ·  4Kommentare

LengYXin picture LengYXin  ·  3Kommentare