在客户端模板中使用&符号并使用thymeleaf进行渲染

时间:2016-08-07 12:55:00

标签: thymeleaf jsrender jsviews

我使用jsrender lib进行客户端模板生成,但整个网站的输出由thymeleaf(spring mvc)处理。问题是js模板包含条件,即

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

但百里叶需要将所有&符号转义为&amp;,但这会导致jsrender失败。另一个解决方案是here,但由于语法不明,jsrender也失败了。

有没有办法输出脚本的内容而不用百万美元引擎解析它?

1 个答案:

答案 0 :(得分:2)

JsRender允许您从字符串以及脚本块中注册模板。

请参阅http://www.jsviews.com/#compiletmpl

所以不要写:

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

然后调用mainTemplate.render(...)mainTemplate.link(...)等您可以删除模板脚本块,而是将模板标记作为字符串传递给$.templates(),如下所示:

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

或者如果你想要你可以保留脚本块声明,但是使用转义的&符号,然后将脚本块的内容作为字符串,unescape&符号,并将该字符串传递给模板定义:

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

或者,您可以将模板块包装在<![CDATA中,然后再次剥离包装器以获取要传递给模板定义的真实模板标记字符串:

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