我在速度模板中使用JavaScript代码并且它无效!
我使用此模板阅读内容并希望将其设置为js变量,但内容中有换行符,我收到以下错误:
SyntaxError:unterminated string literal
在渲染的代码中,您会看到错误:
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-compilation的换行符,但仍然在完整的渲染页面上显示它?
好的,我在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 />")';
测试它 - &gt;作品!
答案 0 :(得分: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;