Как изменить теги шаблона JsRender?

Я использую Твиг. Он использует следующие теги: {{ name }}

Я хочу включить JsRender в свой проект. Но JsRender тоже использует те же самые теги {{:name}}, поэтому возникает конфликт и ничего не работает. Как изменить теги JsRender по умолчанию на пользовательские теги, скажем, в стиле Ruby <%= name %>

ОБНОВЛЕНИЕ:

По какой-то причине я не могу заставить его работать с тегами потока управления, for не ведет себя должным образом с пользовательскими тегами. Почему это происходит?

Вот шаблон:

<script id="myTmpl" type="text/x-jsrender">
    <%!-- This is a copmment %>
    <% for data %>
        <%:key%>
    <% /for %>
</script>

Вот код js:

var template = $.templates("#myTmpl");
var htmlOutput = template.render(data);
$(".div").html(htmlOutput);

Вот отрендеренный результат:

<%!-- This is a copmment %> <% for data %> <% /for %>

person Green    schedule 07.04.2015    source источник
comment
Вы добавили неправильные пробелы в свои теги. См. Рабочий фрагмент в ответе ниже.   -  person BorisMoore    schedule 08.04.2015


Ответы (1)


JsRender позволяет вам изменить разделители, например:

$.views.settings.delimiters("<%", "%>");

Итак, вы бы написали <%: name %>.

Если вы используете JsViews, вы также можете установить символ привязки ^ в {^{, написав:

$.views.settings.delimiters("<%", "%>", "*");

затем с помощью <*%: name %>.

Пример (фрагмент кода ниже):

<%!-- a comment --%>

<%:title%>
<%for items%>
    <div><%:name %></div>
<%/for%>

$.views.settings.delimiters("<%", "%>");

var data = {
  title:"The Title",
  items: [
	{name:"Item one"},
		{name:"Item two"}
	]
};

var template = $.templates("#myTmpl");

var htmlOutput = template.render(data);

$("#result").html(htmlOutput);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//www.jsviews.com/download/jsrender.js"></script>

<script id="myTmpl" type="text/x-jsrender">
<%!-- a comment --%>
<%:title%>
<%for items%>
	<div><%:name %></div>
<%/for%>
</script>

<div id="result"></div>

Обратите внимание, что вы должны просто заменить исходные символы "{{" и "}}" выбранными заменяющими, но не менять пробелы. После замены <% for items%> будет неверным, так как правильный синтаксис {{for items}}, а не {{ for items}}. (Это была ваша ошибка выше...). Должно быть <%for items%>. и т.п.

Документацию см. в разделе Настройка разделителей тегов для JsRender.

Синтаксис тегов см. на странице http://www.jsviews.com/#jsrtags.

person BorisMoore    schedule 07.04.2015
comment
Кажется, это работает для тегов пути данных или выражения, но не работает для тега for и, как я подозреваю, не работает для других тегов потока управления, таких как for - if, else и т. д. Это не работает для тега комментария для уверенности. Как использовать все остальные теги? Теги потока управления. Пожалуйста, смотрите обновление для моего вопроса. - person Green; 08.04.2015
comment
Очевидно, вам нужно следовать синтаксису JsRender. Начните с рабочего шаблона, затем замените символы. Это {{for ...}}...{{/for}}, а не {{ for ... }}...{{ /for }}. - person BorisMoore; 08.04.2015