Как сделать шаблон 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.)

Другие вопросы по тегам