我在一个由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中,用换行符替换它的任何出现,但是我想检查是否有人知道更好,更笨重的方法呢?
感谢您的意见。
答案 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()
函数中的一个问题。