我有两个变量,<%= @user.lat %>
和<%= @user.lng %>
这些变量会根据登录我系统的用户而变化 - 这是用户在注册我的应用时提供的地址。
在scripts.js
文件中,我一直在尝试定义它们,因此我的Google地图可以显示用户的纬度和经度。
但是
function initialize_google_maps() {
var currentlatlng = new google.maps.LatLng(<%= @user.lat %>, <%= @user.lng %>);
等等不起作用,因为它无法理解我的ruby代码。
我尝试在scripts.js文件的顶部定义它们,如:
var map_latitude = "<%= @user.lat %>";
var map_longitude = "<%= @user.lng %>";
然后使用:
function initialize_google_maps() {
var currentlatlng = new google.maps.LatLng(map_latitude, map_longitude);
但我知道你不能把ruby放在js文件中。我确实尝试将其重命名为scripts.js.erb,但这也无效。
那么,我如何定义<%= @user.lat %>
和<%= @user.lng %>
,以便我们的scripts.js文件识别它们,并显示在我的地图中?我确实尝试了这个答案here,创造了一个部分,但它对我没有用。也许我做错了。
请注意:我不能简单地将代码和地图功能放在html.erb文件中的脚本标记之间,因为我正在使用一些ajax,而事情搞得一团糟 - 需要通过js识别ruby变量文件。感谢。
答案 0 :(得分:6)
可以在JavaScript文件中使用Ruby,但不建议这样做,所以我不会解释如何。
要回答您的问题,您可以将变量放在HTML属性中:
<div id="foo" data-lat="<%= @user.lat %>">Books are coming soon!</div>
然后用JavaScript提取它:
var lat = $("#foo").data("lat");
答案 1 :(得分:1)
答案 2 :(得分:0)
我认为不引人注目的javascript可能是一种很好的方法:
答案 3 :(得分:0)
正如其他人建议的那样,你应该以不引人注目的javascript为目标。
然而,您可能希望在视图的js响应中使用嵌入式javascript代码,例如。在这种情况下,您应该在javascript文件中使用erb
扩展名,因此正确的是.js.erb
。