Ответ 1
Это должно работать, т.е. поместите весь встроенный рубин внутри #{}
:
requester_name: "#{current_user.first_name + ' ' + current_user.last_name if current_user}",
requester_email: "#{current_user.email if current_user}",
У меня есть следующая функция для использования ZenDesk. Я хотел бы добавить мои данные current_user в форму следующим образом. (это мой шаблон html.haml). Однако я не могу понять, как это сделать.
:javascript
if (typeof(Zenbox) !== "undefined") {
Zenbox.init({
dropboxID: "xxxxx",
url: "xxxxx.zendesk.com",
tabID: "support",
tabColor: "black",
tabPosition: "Left",
requester_name: =current_user ? "#{current_user.first_name} #{current_user.last_name}" : "" ,
requester_email: =current_user ? "#{current_user.email}" : "" ,
hide_tab: true
});
}
Короче говоря, как один вставляет переменные рельсов в элемент: javascript в haml.
Это должно работать, т.е. поместите весь встроенный рубин внутри #{}
:
requester_name: "#{current_user.first_name + ' ' + current_user.last_name if current_user}",
requester_email: "#{current_user.email if current_user}",
Direct #{}
работает для простых строк, но не является наиболее масштабируемым/безопасным решением в целом.
Например, буквальная обратная косая черта в Ruby вызовет проблемы в Javascript, где она будет интерпретирована как символ новой строки:
- a = "\\n"
:javascript
'#{ a }' !== "\\n"
Из этот удивительный Rails cast можно использовать следующие методы:
escape_javascript
Псевдоним: j
.
Работает только со строками.
Сбрасывает символы, которые могут иметь специальные значения в строках Javascript, как escape-обратная косая черта, в формат, подходящий для ввода литералов в Javascript.
Поддерживать html_safe
статус ввода,
поэтому требуется html_safe
иначе специальные HTML-символы, такие как <
, будут экранированы в <
.
- a = "\\n<"
:javascript
'#{ j(a) }' === '\\n<'
'#{ j(a).html_safe }' === '\\n<'
to_json + html_safe
Работает потому, что JSON почти подмножество буквенной нотации объектов Javascript.
Работает на любом хэш-объекте, включая строки, массивы и целые числа, которые преобразуется в фрагменты JSON соответствующего типа данных.
- data = { key1: 'val1', key2: 'val2' }
:javascript
data = #{ data.to_json }
data.key1 === 'val1'
data.key2 === 'val2'
атрибуты данных
Добавьте значения в атрибуты, извлеките их с помощью операций DOM Javascript.
Лучше с помощником content_tag
:
= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'}
:javascript
$('#data').data('key1') === 'val1'
$('#data').data('key2') === 'val2'
угольник
Библиотека, специализирующаяся на задании: 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
gon.key1 === 'val1'
gon.key2 === 'val2'