如何在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');