0

我在由 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 芯片给出了 Unexpected token 错误。

例如,我尝试了许多 TT 过滤器

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

这成功地删除了换行符并用 <\br> 替换它们(请原谅反斜杠,否则编辑器正在解释 br s)但是它不起作用,然后页面会在其中呈现 <\br> 而不是休息。

在这个阶段,我认为这样做的唯一方法是在 bubbleDetails 中搜索 floot.desc 中的 <\br> 并用换行符替换它的任何出现,但是我想检查是否有人知道更好,更少笨拙的方法吗?

感谢您的输入。

4

2 回答 2

0

我以前从未使用过这个包,但是看看这个文档,它看起来可能是你需要的:

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

向下滚动到 dquote 部分

也转义双引号,这可能会很好

于 2013-01-16T20:57:27.830 回答
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>

这个相关的问题和答案也可能有用。

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

于 2013-01-16T23:44:17.737 回答