Ошибка JavaScript из-за скорости перевода строки

Я использую 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-компиляции, но по-прежнему показывать ее на полной отрендеренной странице?


Хорошо, я решил это с помощью EscapeTool от Velocity.

В сочетании с ответом от 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>-Tag, но я еще не проверял это.

Так же возможно было бы:

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

Протестировал -> работает!

1 ответ

Решение

Извините, но новые строки в JavaScript не принимаются, не знаю, как выглядит ваш шаблон, но если вы действительно не можете заменить символы новой строки на \n или <br> Вы можете сделать трюк:

  • В шаблоне визуализируем содержимое, поступающее из базы данных в скрытый div:

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

  • В вашем коде JavaScript прочитайте содержимое div в вашей переменной:

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

Другие вопросы по тегам