Dav*_*e G 54 javascript haml ruby-on-rails
我有以下使用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
});
}
Run Code Online (Sandbox Code Playgroud)
简而言之,如何将rails变量注入haml中的:javascript元素.
Hei*_*kki 66
这应该工作,即.将所有内联红宝石放入#{}
:
requester_name: "#{current_user.first_name + ' ' + current_user.last_name if current_user}",
requester_email: "#{current_user.email if current_user}",
Run Code Online (Sandbox Code Playgroud)
Cir*_*四事件 29
Direct #{}
适用于简单字符串,但通常不是最具扩展性/安全性的解决方案.
例如,Ruby中的字面反斜杠会导致您在Javascript中出现问题,它将被解释为换行符:
- a = "\\n"
:javascript
'#{ a }' !== "\\n"
Run Code Online (Sandbox Code Playgroud)
从这个令人敬畏的Rails演员,可以使用以下技术:
escape_javascript
别名:j
.
仅适用于字符串.
将Javascript字符串中具有特殊含义的字符(如反斜杠转义)转换为适合放入Javascript字符串文字引号的格式.
保持html_safe
输入的状态,因此需要html_safe
特殊的HTML字符,如<
将被转义<
.
- a = "\\n<"
:javascript
'#{ j(a) }' === '\\n<'
'#{ j(a).html_safe }' === '\\n<'
Run Code Online (Sandbox Code Playgroud)
to_json + html_safe
可以工作,因为JSON 几乎是Javascript对象文字表示法的一个子集.
适用于任何哈希对象,包括转换为相应数据类型的JSON片段的字符串,数组和整数.
- data = { key1: 'val1', key2: 'val2' }
:javascript
data = #{ data.to_json }
data.key1 === 'val1'
data.key2 === 'val2'
Run Code Online (Sandbox Code Playgroud)
数据属性
向属性添加值,使用Javascript DOM操作检索它们.
更好的content_tag
帮手:
= content_tag 'div', '', id: 'data', data: {key1: 'val1', key2: 'val2'}
:javascript
$('#data').data('key1') === 'val1'
$('#data').data('key2') === 'val2'
Run Code Online (Sandbox Code Playgroud)
坤
专门为这项工作的图书馆:https://github.com/gazay/gon
可能是最强大的解决方案.
的Gemfile:
gem 'gon'
Run Code Online (Sandbox Code Playgroud)
控制器:
gon.key1 = 'val1'
gon.key2 = 'val2'
Run Code Online (Sandbox Code Playgroud)
布局app/views/layouts/application.html.erb
:
<html>
<head>
<meta charset="utf-8"/>
<%= include_gon %>
Run Code Online (Sandbox Code Playgroud)
视图:
:javascript
gon.key1 === 'val1'
gon.key2 === 'val2'
Run Code Online (Sandbox Code Playgroud)