Ошибка 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>-тега, но я еще не проверял.

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

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

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


person user3278740    schedule 06.02.2014    source источник
comment
не уверен, что понимаю, но разве вы не можете использовать ‹br› или \n вместо новой строки?   -  person Emilio Rodriguez    schedule 06.02.2014
comment
Это проблема. Я бы так хотел, но эти новые строки генерируются шаблоном. В базе данных содержимое (вопрос.ответ.данные) сохраняется с тегами ‹p›‹/p› для новых строк. Это нормально, но я думаю, что они будут скомпилированы в новые строки до того, как контент попадет в скрипт-функцию. Я пытался поймать и заменить разрывы строк разными способами, но не могу найти решение.   -  person user3278740    schedule 06.02.2014


Ответы (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;

person Emilio Rodriguez    schedule 06.02.2014
comment
спасибо :) Я уже знал, что новые строки недопустимы, но, похоже, скорость не знает :'D больше нет ошибки и отображается содержимое, но теперь все отображается в одной строке. Нет ли возможности сбежать или поймать разрыв строки? - person user3278740; 06.02.2014
comment
вы можете попробовать заменить \n на <br> следующим образом: var exampleText = document.getElementById('example-text').innerHTML.replace("\n","<br>"); - person Emilio Rodriguez; 06.02.2014
comment
Я уже пробовал заменить, но все равно не работает. Было бы намного проще, если бы я знал, какой разрыв строки используется скоростью, потому что это не \n и не ‹p› (который хранится в базе данных). - person user3278740; 06.02.2014