如何使javascript文件可以访问ruby变量?

时间:2013-05-08 00:36:42

标签: javascript ruby-on-rails ruby

我有两个变量,<%= @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变量文件。感谢。

4 个答案:

答案 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)

http://railscasts.com/episodes/324-passing-data-to-javascript会让你朝着正确的方向前进。

答案 2 :(得分:0)

我认为不引人注目的javascript可能是一种很好的方法:

http://railscasts.com/episodes/205-unobtrusive-javascript

答案 3 :(得分:0)

正如其他人建议的那样,你应该以不引人注目的javascript为目标。

然而,您可能希望在视图的js响应中使用嵌入式javascript代码,例如。在这种情况下,您应该在javascript文件中使用erb扩展名,因此正确的是.js.erb