Ruby on Rails: частичный рендеринг HTML в виде одной строки строки

Есть ли способ отобразить партиал html.erb в виде одной строки строки?

Я пытаюсь отобразить частичный _foo.html.erb внутри javascript, чтобы я мог использовать весь html-документ как строковую переменную.

Я пробовал следующий код:

var foo = "<%= render :partial => "foo" %>";

А внутри _foo.html.erb, скажем, у меня есть следующее:

<h1>Hello</h1>
<p>World</p>

Этот способ даст мне синтаксическую ошибку в javascript, потому что в партиале есть CRLF. Но если я напишу код типа...

<h1>Hello</h1>" +
"<p>World</p>

Теперь это не ошибка в javascript. Я могу сделать последний способ, но это катастрофа, если партиал содержит много строк кода с рубиновым скриптом.

Может есть альтернативный способ?

Заранее спасибо.


person DynamicScope    schedule 17.11.2010    source источник


Ответы (2)


Используйте функцию escape_javascript:

var foo = "<%= escape_javascript(render :partial => 'foo') %>";
person Marek Sapota    schedule 17.11.2010
comment
Если вы обнаружите, что escape_javascript слишком много для ввода, помните, что он имеет псевдоним j. - person David Tuite; 20.09.2012

Быстрый и грязный взлом:

var foo = "<%= render(:partial => "foo").gsub(/[\n\r]/, ' ') %>";

Это просто заменяет новые строки пробелами, что недопустимо с точки зрения парсера HTML.

Однако это довольно ненадежный способ создания объектов JavaScript. Вам нужно будет учитывать кавычки в частичном, что сделает ваш JavaScript недействительным и т. д. Я предлагаю попробовать создать шаблоны JavaScript для HTML, который вы хотите отобразить, и заполнить их версиями JSON ваших моделей.

person abscondment    schedule 17.11.2010