如何在Rails视图中将Ruby变量传递给JavaScript函数?
我想知道在rails视图中将变量传递给JavaScript函数的最佳实践是什么。 现在我正在做类似的事情:
Event.observe(window, 'load', function(){ js_function(, ); )}
这是正确的方法吗?
一些选择:
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 %>
数据属性
向属性添加值,使用Javascript DOM操作检索它们。
使用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
:
<%= include_gon %>
视图:
<%= javascript_tag do %> gon.key1 === 'val1' gon.key2 === 'val2' <% end %>
也可以看看
- 在RoR中将变量值注入javascript和HAML
- content_for :javascripts_vars do = "var costs_data = #{@records[:cost_mode][:data].to_json}".html_safe = "var graph_data = #{@records[:cost_mode][:graph].to_json}".html_safe
有一种叫做“不引人注目的javascript”的技术。 这是关于它的Railscast: 链接文本 。 它适用于原型和jQuery。 还有一些插件可以帮助简化本文中描述的一些任务。
我发现gem 客户端变量 ,它可以帮助您轻松完成。
在HAML中可以显示数据:
.position{data: {latitude: @claim.latitude.to_json, longitude: @claim.longitude.to_json}} :javascript var latitude = $('.position').data('latitude'); var longitude = $('.position').data('longitude');