2016-08-07 4 views
1

Я использую jsrender lib для создания шаблонов на стороне клиента, но весь вывод веб-сайта обрабатывается тимелеафом (spring mvc). Проблема заключается в том, что JS шаблон содержит condtiion т.е.Использование символа амперсанда в клиентском шаблоне и рендеринг его с помощью thymeleaf

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

но thymeleaf требует все амперсанды быть экранированы, как &amp;, но это вызывает jsrender на провал. Другое решение найдено here, но jsrender также не работает из-за неизвестного синтаксиса.

Есть ли способ вывести содержимое скрипта без разбора его с помощью механизма тимелеафа?

ответ

1

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 амперсанды и передать эту строку на ваш templa определение тэ:

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); 
...