Заменить тег jquery-templ - PullRequest
       8

Заменить тег jquery-templ

0 голосов
/ 09 декабря 2010

Есть ли способ заменить основной тег на jquery-tmpl?

Пример:

var data = {Имя: 'Pele', Языки: ["Португальский", "Английский", "Испанский"]};

Итак, для тега script мы определяем следующий шаблон

Имя: $ {Имя} {{каждый язык}} Я говорю в $ value {{/}} Каждая

То, что я хотел изменить, это ... Вместо использования {{each}} я бы использовал что-то вроде $$ each $$ Вместо $ {Name} я бы использовал что-то вроде $ # Name $

Вы можете спросить себя, почему я хочу это сделать.

Основная причина в том, что я, потому что в проекте, над которым мы работаем, использует Django, и когда мы помещаем код, такой как {{each}} (даже в тег сценария с типом, установленным в text / html), движок представления Django считает, что серверный тег и пытается отобразить его, как если бы он был серверным тегом.

Обновление: То, что я ищу, это способ установить Delimeter на jQuery-tmpl, как тот, который доступен на Mustache.js http://mustache.github.com/mustache.5.html (ищите Установить разделитель )

Спасибо.

Ответы [ 3 ]

1 голос
/ 09 декабря 2010

Другой подход заключается в определении шаблона в файле js, который не обрабатывается django как шаблон.

Если это невозможно, другой альтернативой подходу Доминика будет определение переменных для '{{' и '}}', возможно, соответственно jqtmpl_open и jqtmpl_close и использование их в шаблоне следующим образом:

{{ jqtmpl_open }}each Languages{{ jqtmpl_close }}

Это будет более читабельным в шаблоне.

Изменить разделитель для jquery-tmpl сложно. Глядя на код, кажется, что {{жестко закодировано в некоторых регулярных выражениях.

var oldManip = jQuery.fn.domManip, tmplItmAtt = "_tmplitem", htmlExpr = /^[^<]* (<[\w\W]+>)[^>]*$|\{\{\! /,
   newTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];

Единственное решение состоит в том, чтобы создать jquery-tmpl для вашего проекта и изменить эти жестко закодированные регулярные выражения в соответствии с вашими потребностями.

1 голос
/ 09 декабря 2010

Конечно, если вы хотите, чтобы литерал { в вашем HTML, используйте templatetag с openblock.

{% templatetag openblock %}

Если вы хотите литерал }, используйте closeblock:

{% templatetag closeblock %}

Итак, если вы хотите {{each}} в своем HTML, используйте:

{% templatetag openblock %}{% templatetag openblock %}each{% templatetag closeblock %}{% templatetag closeblock %}
0 голосов
/ 09 декабря 2010

Этот вопрос уже задавался здесь Теги шаблонов jquery конфликтуют с шаблоном Django! но я подумал, что добавлю из своего опыта.

В двух словах, я добавил этот собственный шаблон тегов «raw» в мои проекты jquery-tmpl / django: http://www.holovaty.com/writing/django-two-phased-rendering/

...