1

我想在 genshi 模板中渲染一个 mustache/handlebars 模板。由于 mustache 标签,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<!-- -->会引发错误,并且在脚本中使用/* */只会导致 Handlebars 按原样打印它。

有没有办法告诉 Genshi 不要解析模板的一大块?

谢谢!

4

2 回答 2

1

不确定这是否有帮助,但我遇到了类似的问题。

我有一大块标记正在通过 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 关闭标记包装在注释中,否则我会得到一个文字 ]]> 来呈现。

于 2013-07-02T16:11:40.597 回答
1

您可以将 CDATA 定界符放在小胡子注释中:

<script id="some-template" type="text/x-mustache-template">
    {{! <![CDATA[ }}
    ... my template here ...
    {{! ]]> }}
</script>

// <![CDATA[(这本质上与使用和// ]]>用于 JavaScript 脚本的技巧相同。)

于 2013-08-09T19:07:33.853 回答