0

我有两个变量,<%= @user.lat %>并且<%= @user.lng %>

这些变量会根据登录我的系统的用户而变化 - 这是用户在注册我的应用程序时提供的地址。

在一个scripts.js文件中我一直在尝试定义它们,所以我的谷歌地图可以显示用户的纬度和经度。

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 文件识别并显示在我的地图中?我确实在这里尝试了这个答案,创建了一个部分,但它对我不起作用。也许我做错了。

请注意:我不能简单地将脚本标签之间的代码和映射函数放在 html.erb 文件中,因为我使用了一些 ajax,事情变得一团糟—— ruby​​ 变量需要被 js 文件识别。谢谢。

4

4 回答 4

6

可以在 JavaScript 文件中使用 Ruby,但不建议这样做,因此我不会解释如何。

要回答您的问题,您只需将变量放在 HTML 属性中:

<div id="foo" data-lat="<%= @user.lat %>">Books are coming soon!</div>

然后用 JavaScript 提取它:

var lat = $("#foo").data("lat");
于 2013-05-08T00:43:08.993 回答
1

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

于 2013-05-08T02:00:25.050 回答
0

我认为不显眼的 javascript 可能是做到这一点的好方法:

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

于 2013-05-08T01:13:25.653 回答
0

正如其他人所建议的那样,您应该针对不显眼的 javascript。

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

于 2013-05-08T01:58:29.637 回答