2016-08-07 44 views
1

Ich benutze jsrender lib für die clientseitige Vorlagengenerierung, aber die gesamte Website-Ausgabe wird von thymeleaf (spring mvc) verarbeitet. Das Problem ist, dass js Vorlage enthält condtiion heißtVerwenden Sie kaufmännisches Und-Zeichen in der clientseitigen Vorlage und rendern Sie es mit thymeleaf

<script id="main-menu-form-tmpl" type="text/x-jsrender"> 
     {{if (index && (index == 0 || ... 

aber thymeleaf erfordert alle Et-Zeichen als &amp; entkommen werden, aber dies führt zu jsrender zum Scheitern verurteilt. Eine andere Lösung gefunden here, aber jsrender schlägt auch wegen der unbekannten Syntax fehl.

Gibt es eine Möglichkeit, Skript-Inhalt auszugeben, ohne es mit Thymeleaf-Engine zu analysieren?

Antwort

1

Mit JsRender können Sie Vorlagen sowohl aus Strings als auch aus Skriptblöcken registrieren.

Siehe http://www.jsviews.com/#compiletmpl.

Also statt zu schreiben:

var mainTemplate = $.templates("#main-menu-form-tmpl"); 

und dann mainTemplate.render(...) oder mainTemplate.link(...) usw. aufrufen können Sie stattdessen Ihre Vorlage Skriptblock entfernen und stattdessen Ihre Vorlagen-Markup als Zeichenfolge $.templates() wie in geben:

var mainTemplate = $.templates("... {{if (index && (index == 0 || ..."); 
... 

Oder wenn Sie möchten, können Sie die Skript-Block-Deklaration behalten, aber mit entkündigten Et-Zeichen und dann den Inhalt des Skriptblocks als String abrufen, die Ampersands entwirren und diese Zeichenfolge an Ihr Templa übergeben te Definition:

var mainTemplateString = $("#main-menu-form-tmpl").text().replace(/&amp;/g, "&"); 
var mainTemplate = $.templates(mainTemplateString); 
... 

Alternativ können Sie Ihre Vorlage Block in <![CDATA wickeln und wieder, Streifen der Wrapper die reale Vorlage Markup-Zeichenfolge, die Sie an die Template-Definition übergeben wollen bekommen:

var mainTemplateString = $("#main-menu-form-tmpl").text().slice(16, -10); 
var mainTemplate = $.templates(mainTemplateString); 
...