Как сделать шаблон JavaScript внутри Genshi?
Я хотел бы сделать шаблон усов / руля внутри шаблона Генши. Кажется, Генши поднял TemplateSyntaxError из-за тегов усов.
Я попытался поместить теги CDATA, как размещено здесь, как внутри, так и снаружи <script>
:
<script id="some-template" type="text/x-mustache-template">
<![CDATA[
... my template here ...
]]>
</script>
Так как я делаю $('#some-template').html()
, Handlebars просто отображает тег CDATA вместе с остальной частью HTML, который портит результат.
<![CDATA[
<script id="some-template" type="text/x-mustache-template">
... my template here ...
</script>
]]>
Таким образом, браузер комментирует первый <script>
тег.
Кроме того, комментируя CDATA с <!-- -->
выдает ошибку и внутри скрипта с /* */
просто заставляет руль печатать его как есть.
Можно ли как-то сказать Генши не разбирать кусок шаблона?
Спасибо!
2 ответа
Не уверен, поможет ли это, но я столкнулся с подобной проблемой.
У меня есть кусок разметки, который запускается через анализатор XML, который добавляет шаблон руля в DOM, который позже будет скомпилирован скриптом.
Для того, чтобы шаблон руля прошел мимо парсера XML, мне нужно было обернуть его блоком CDATA, но это вызывало схожие проблемы с вашим. Если я поместил CDATA в теги скрипта, первый бит разметки шаблона был проглочен в комментарии. Если я разместил их снаружи, весь шаблон комментировался и был недоступен при вызове сценария для его компиляции.
Я смог обойти это, вставив HTML-комментарий в качестве ненужного щита для глотания, вот так:
<div id="contentChunk">
<div id="blah" class="foo">
Some vanilla HTML being added.
</div>
<script id="hbTemplate" type="text/x-handlebars-template">
<![CDATA[
<!-- blocker comment: first html node of handlebars script gets swallowed. -->
{{#each data.items}}
<div id="item{{id}}">{{{name}}}</div>
{{/each}}
<!-- ]]> -->
</script>
</div>
Я также обернул завершающий тэг CDATA close в комментарии, в противном случае я получал литерал]]> для рендеринга.
Вы можете поместить свои разделители CDATA в комментарии к усам:
<script id="some-template" type="text/x-mustache-template">
{{! <![CDATA[ }}
... my template here ...
{{! ]]> }}
</script>
(Это по сути тот же трюк, что и при использовании // <![CDATA[
а также // ]]>
для сценариев JavaScript.)