JavaScript因渲染速度换行而出错

时间:2014-02-06 09:35:31

标签: javascript velocity line-breaks liferay-velocity liferay-aui

我在速度模板中使用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;作品!

1 个答案:

答案 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;