2016-08-05 12 views
0

Ist es möglich, eine Vorlage, oder auch nur eine partielle, aus dem Kontext, der an eine Top-Level-Vorlage übergeben wird, zu rendern? Es scheint, als würde dies rekursives Rendering erfordern, aber vielleicht fehlt mir etwas.Rendering Vorlage im Kontext in Lenker

Das folgende Beispiel demonstriert dies mit Bootstrap.

sagen das mein Top-Level-Vorlage ist:

<div class="panel"> 
    <div class="panel-body"> 
    {{{description}}} 
    </div> 
</div> 

Und mein Kontext ist:

{ 
    description: "\ 
    Some text before the warning.\ 

    <div class=\"alert alert-warning\" role=\"alert\">\ 
     <span class=\"glyphicon glyphicon-warning-sign\" aria-hidden=\"true\">&nbsp;</span>\ 
     My warning here.\ 
    </div>\ 

    Some text after the warning." 
} 

Was möchte ich die Warnung in eine teilweise für eine Reihe von Gründen tun getrennt ist :

  • willkürliche Platzierung innerhalb umgebenden Text
  • Kann partials für andere Typen als Warnung (Gefahr, info, etc.) machen
  • können so viele hinzufügen, wie er im Rahmen String

Aus diesen Gründen setzt benötigt wird, scheint es, wie es nicht möglich ist, es zu setzen in die Top-Level-Vorlage.

Die partielle würde wie folgt aussehen:

<script id="partial-warning-template" type="text/x-handlebars-template"> 
    <div class="alert alert-warning" role="alert"> 
    <span class="glyphicon glyphicon-warning-sign" aria-hidden="true">&nbsp;</span> 
    {{{warning-message}}} 
    </div> 
</script> 

Sobald diese an Ort und Stelle ist, würde ich es zu benutzen, wie so in der Lage:

{ 
    description: "\ 
    Some text before the warning.\ 

    {{> partial-warning-template \"My warning here.\"}}\ 

    Some text after the warning.\ 

    {{> partial-warning-template \"Now adding a second warning.\"}}" 
} 

Vielleicht etwas Grundsätzliches fehlt mir - Gibt es einen idiomatischen Weg, dies zu tun?

Antwort

0

Sie können die Teilblöcke nicht in den Wert description aufnehmen und erwarten, dass sie von der Vorlagenmethode der obersten Ebene als Teilzahlen ausgewertet werden; Die gesamte Zeichenfolge description wird als einzelne Literalzeichenfolge ausgegeben.

Was würden Sie tun müssen, ist die partials ausgewertet haben, bevor Sie das Kontextobjekt mit description auf die oberste Ebene Template-Methode übergeben.

Wenn Sie Ihren Teil in so etwas wie die folgende Art und Weise vorkompiliert haben:

Handlebars.registerPartial('warn', Handlebars.compile(document.getElementById('partial-warning-template').innerHTML)); 

Dann werden Sie in der Lage sein, diese teilweise zu nennen, wenn Sie Ihre description String konstruieren:

{ 
    description: 'Some text before the warning.' + 
       Handlebars.partials.warn({ 'warning-message': 'My warning here.' }) + 
       'Some text after the warning.' + 
       Handlebars.partials.warn({ 'warning-message': 'Now adding a second warning.' }) 
} 
+0

Dank! Als Referenz habe ich die kompilierte Vorlage einer Standardfunktion zugewiesen, anstatt das partielle Objekt zu verschmutzen, aber den gleichen Effekt. Lassen Sie warn = Handlebars.compile ($ ("# partial-warning-template"). Html()); und später + warnen ("Meine Warnung hier.") + "Ein Text nach der Warnung" + warn ("Jetzt eine zweite Warnung hinzufügen.") "Ein Text vor der Warnung."; Wo meine Vorlage hatte {{{this}}} wie der innere Inhalt. –

Verwandte Themen