如何在Genshi中呈现一个javascript模板?

时间:2013-01-24 14:16:01

标签: javascript templates handlebars.js mustache genshi

我想在genshi模板中渲染小胡子/手柄模板。由于小胡子标签,Genshi似乎引发了TemplateSyntaxError。

我尝试在<script>内外发布here的CDATA代码:

<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不要解析模板的一部分?

谢谢!

2 个答案:

答案 0 :(得分: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关闭标记,否则我得到了一个文字]]&gt;渲染。

答案 1 :(得分:1)

您可以将CDATA分隔符放在小胡子注释中:

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

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