Использование знака амперсанда в шаблоне на стороне клиента и визуализация его с помощью тимелеафа

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

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

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

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


person nKognito    schedule 07.08.2016    source источник


Ответы (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 || ...");
...

Или, если вы хотите, вы можете сохранить объявление блока скрипта, но с экранированными амперсандами, а затем получить содержимое блока скрипта в виде строки, удалить амперсанд и передать эту строку в определение вашего шаблона:

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);
...
person BorisMoore    schedule 07.08.2016