来自多行字符串的模板工具包的意外标记ILLEGAL

时间:2013-01-16 20:37:37

标签: javascript template-toolkit

我在一个由template :: toolkit预处理的html页面中有一个js脚本。

脚本如下;

<script>
    $(function(){ 
    var floot = {
        id : [% floot.id %],
        image : '[% floot.image %]',
        title : "[% floot.title %]",
        desc : "[% floot.desc %]",
        history : []
    };
            /* unrelated stuff */
            /* set click event to display the floot details in an overlay */
    $('#' + floot.id).children('.openDetails').click(function() { 
        bubbleDetails(floot, user);
    });
</script>

问题是floot.desc可以包含换行符 - 它是一个描述,我想保留它们,但是行中的js barfs芯片会出现意外的令牌错误。

我尝试过多个TT过滤器,例如

[% floot.desc | html_line_break | replace('\n', ' ') %]

这会成功删除换行符并将其替换为&lt; \ br&gt; (原谅反斜杠,编辑器正在解释br s)但是它不起作用,然后使用&lt; \ br&gt;呈现页面。在它而不是休息。

在这个阶段,我认为唯一的方法是搜索&lt; \ br&gt;在bubbleDetails中的floot.desc中,用换行符替换它的任何出现,但是我想检查是否有人知道更好,更笨重的方法呢?

感谢您的意见。

2 个答案:

答案 0 :(得分:0)

我之前从未使用过这个软件包,但是看一下这个软件,看起来它可能就是你需要的东西:

http://template-toolkit.org/docs/manual/VMethods.html

向下滚动到dquote部分

也可以逃避双引号,这可能是好的

答案 1 :(得分:0)

有用于处理JSON转换的TT插件,如果没有明确地做,这就是你有效的。如果可能的话,应该避免代码生成 - 让插件担心这些神秘的问题。

我喜欢JSON :: Escape,您可以像这样执行:

[% USE JSON::Escape; %]
<script>
    $(function(){ 
    var floot = [% floot.json %];
    floot.history = []; // might not even be necessary?
    };
            /* unrelated stuff */
            /* set click event to display the floot details in an overlay */
    $('#' + floot.id).children('.openDetails').click(function() { 
        bubbleDetails(floot, user);
    });
</script>

This related question and answer也可能有用。

如果你这样做并且错误仍然存​​在,那么正如@agreco所说,它必须是bubbleDetails()函数中的一个问题。