Javascript 通过模板工具包从多行字符串中获取的意外令牌非法

Javascript 通过模板工具包从多行字符串中获取的意外令牌非法,javascript,template-toolkit,Javascript,Template Toolkit,我在html页面中有一个js脚本,该页面由template::toolkit预处理 剧本如下: <script> $(function(){ var floot = { id : [% floot.id %], image : '[% floot.image %]', title : "[% floot.title %]", desc : "[% floot.desc %]", hist

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

剧本如下:

<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>
这成功地删除了换行符,并将其替换为(请原谅使用反斜杠,否则编辑器将解释br s)。但是,如果它不起作用,则会使用其中的换行符而不是换行符呈现页面

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


感谢您的输入。

我以前从未使用过此软件包,但从文档来看,此软件包可能正是您所需要的:

向下滚动到dquote部分


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

有用于处理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>
[%使用JSON::Escape;%]
$(函数(){
var floot=[%floot.json%];
floot.history=[];//甚至可能不需要?
};
/*无关的东西*/
/*设置“单击事件”以在覆盖中显示楼板详细信息*/
$('#'+floot.id).子项('.openDetails')。单击(函数(){
气泡细节(floot,用户);
});
也可能有用


如果您这样做,错误仍然发生,那么正如@agreco所说,这一定是
bubbleDetails()中的一个问题
函数。

您好,谢谢您的输入。使用dquote我也会遇到同样的问题。换行符会被转换,但当我稍后显示floot.desc时,它现在显示的是转换后的文本,而不是原始文本。如果js desc字符串看起来正常,那么问题一定在
bubbleDetails
中。如果查看源代码,它是否显示
\n
或者
\\n
?如果只是
\n
,则气泡细节可能正在进行一些编码
[% 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>