Несколько вариантов:
escape_javascript
Псевдоним: j
.
Работает только со строками.
Выбрасывает символы, которые могут иметь особое значение в строках Javascript,
подобно обратной косой черте, в формат, подходящий для размещения внутри строковых кавычек Javascript.
Поддерживает html_safe
статус ввода,
поэтому необходимо html_safe
, иначе специальные HTML-символы, такие как <
, будут экранированы в <
.
<% a = "\\n<" %>
<%= javascript_tag do %>
'<%= j(a) %>' === '\\n<'
'<%= j(a).html_safe %>' === '\\n<'
<% end %>
to_json + html_safe
Как уже упоминал Вячеслав, иди голосуй за него.
Работает, потому что JSON является почти подмножеством буквенной нотации объекта Javascript .
Работает не только с хеш-объектами, но также со строками, массивами и целыми числами, которые
преобразованы в JSON-фрагменты соответствующего типа данных.
<% data = { key1: 'val1', key2: 'val2' } %>
<%= javascript_tag do %>
var data = <%= data.to_json.html_safe %>
data.key1 === 'val1'
data.key2 === 'val2'
<% end %>
атрибуты данных
Добавление значений к атрибутам, получение их с помощью операций DOM Javascript.
Лучше с помощником content_tag
:
<%= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'} %>
<%= javascript_tag do %>
$('#data').data('key1') === 'val1'
$('#data').data('key2') === 'val2'
<% end %>
Иногда его называют "ненавязчивый Javascript".
гон
Специализированная библиотека для работы: https://github.com/gazay/gon
Пожалуй, самое надежное решение.
Gemfile:
gem 'gon'
Контроллер:
gon.key1 = 'val1'
gon.key2 = 'val2'
Макет app/views/layouts/application.html.erb
:
<html>
<head>
<meta charset="utf-8"/>
<%= include_gon %>
Вид:
<%= javascript_tag do %>
gon.key1 === 'val1'
gon.key2 === 'val2'
<% end %>
См. Также