0

我在速度模板中使用 JavaScript 代码,但它不起作用!

我使用此模板阅读内容并希望将其设置为 js 变量,但内容中有换行符,我收到以下错误:

SyntaxError:未终止的字符串文字

在呈现的代码中,您会看到错误:

var exampleText = 'This is the first line

and this is the second line.';

在原始代码中是这样写的:

    var exampleText = '$question.answer.data';
var regularPanels = new A.Panel( { 
    bodyContent: exampleText, 
    collapsible: true, 
    collapsed: true,
    headerContent: '$question.data' } ) .render('#regularPanels$counter$reserved-article-id.data$randomNamespace');  

});

是否有可能忽略 js 编译的换行符,但仍将其显示在完整呈现的页面上?


好的,我在 Velocity 的EscapeTool的帮助下解决了这个问题。

结合emiliocai的答案,以下代码可以正常工作:

<div id="example-text" style="display:none;">
   <p>$escapeTool.java($question.answer.data).replace("\n","<br />")</p>
</div>

<script type="text/javascript" charset="utf-8">

AUI().ready('aui-panel', function(A) { 

var exampleText = document.getElementById('example-text').innerHTML;
var regularPanels = new A.Panel( { 
    bodyContent: exampleText, 
    collapsible: true, 
    collapsed: true,
    headerContent: '$question.data' } ) .render('#regularPanels$counter$reserved-article-id.data$randomNamespace');  

});

</script>

可能是,它可以在没有隐藏<div>标签的情况下工作,但我还没有测试过。

所以也可能是:

var exampleText = '$escapeTool.java($question.answer.data).replace("\n","<br />")';

测试它-> 有效!

4

1 回答 1

0

很抱歉,换行符在 JavaScript 中是不可接受的,不确定你的模板是什么样子,但如果你真的不能用 \n 替换换行符,或者<br>你可以做一个技巧:

  • 在模板中,将来自数据库的内容渲染到隐藏的 div 中:

    <div id="example-text" style="display:none">$question.answer.data</div>

  • 在您的 javascript 代码中,将 div 的内容读入您的变量中:

    var exampleText = document.getElementById('example-text').innerHTML;

于 2014-02-06T10:21:16.063 回答