繁体   English   中英

您如何将ruby放在javascript函数Google Map中?

[英]How do you put ruby inside a javascript function, google maps?

我有一个Ruby on Rails应用程序,上面有一个带有标记的谷歌地图,当您单击它时,它会使用JavaScript打开一个信息窗口。 我想将ruby var放到在窗口中显示数据库信息的javascript fn中。

因此,当用户单击标记时,他们将从数据库中获取动态信息,而不仅仅是从js fn获得通用文本。

如果有人在此之前做过,如果您能告诉我您是如何做到的,我将不胜感激,谢谢

您可以使用标记将javascript直接放在html.erb文件上,并在javascript中运行嵌入式ruby代码。 请记住要使用escape_javascript,因为有时您的变量会因诸如撇号之类的特殊字符而使脚本混乱。

<script>
  alert(<%= escape_javascript @variable %>);
</script> 

爱德华(Edward)使用erb处理Javascript文件的解决方案将起作用(尽管您必须记住将.erb添加到JS文件的末尾,以便ERB知道要处理它...即maps.js.erb)。

事实是,这与我所理解的资产管道的哲学背道而驰。 Rails特意将所有Javascript连接到一个文件中,以节省HTTP请求的开销。 但是,更重要的是,浏览器会缓存此文件,因此无需在每个请求时都重新获取它。 如果您有一个变量可以根据发出的请求更改JS文件,则Rails需要针对每个请求重新处理JS文件,这很昂贵。 (请注意,相同的概念也适用于CSS)。

我发现最好的解决方案是将变量值以某种方式放在页面中,因为这是一个需要在每个请求上动态处理的文件。 通常,我会看到人们将它们放在隐藏的形式中,例如:

<%= content_tag :input, nil, :type => 'hidden', :id => "map-name-field", :'data-name' => @map.name %> 

我还使用的一种方法是将其附加到该页面上唯一的页面元素上,例如名称或标题:

<%= content_tag :h2, @map.name, :id => "map-name", :'data-name' => @map.name %>

将其放在页面上后,您可以从JS函数中进行获取(但关键是对于地图的所有实例而言,fetcher函数都是相同的,因此无需更改或重新处理JS文件):

// Assuming jQuery
// For the hidden input approach:
var mapName = $('#map-name-field').value
// or for the data-attribute approach:
var mapName = $('#map-name').attr('data-name')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM