【问题标题】:Unexpected token ILLEGAL from multi line string via template toolkit通过模板工具包来自多行字符串的意外令牌非法
【发布时间】:2012-12-31 07:13:25
【问题描述】:

我在一个 html 页面中有一个由 template::toolkit 预处理的 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 s)但是它不起作用,然后页面会在其中呈现 而不是休息。

在这个阶段,我认为唯一的方法是在bubbleDetails 中的floot.desc 中搜索,并用换行符替换它的任何出现,但是我想检查是否有人知道更好、更简洁的方法?

感谢您的意见。

【问题讨论】:

    标签: javascript template-toolkit


    【解决方案1】:

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

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

    向下滚动到 dquote 部分

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

    【讨论】:

    • 您好,感谢您的意见。使用 dquote 我遇到了同样的问题。换行符已转换,但是当我稍后显示 floot.desc 时,它现在显示转换后的文本,而不是原始文本。
    • 如果js desc字符串看起来没问题,那么问题一定在bubbleDetails之内。如果您查看源代码是显示\n 还是\\n?如果只是\n,那么bubbleDetails 可能正在做一些编码
    【解决方案2】:

    有用于处理 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()函数的问题。

    【讨论】:

      猜你喜欢
      • 2013-10-06
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多