将变量从控制器Rails 4传递给JS

时间:2015-06-14 20:15:09

标签: javascript ruby-on-rails

我想将变量从控制器传递给js文件。我在这做什么:

#index.html.erb
    <%= content_tag 'div', id: 'coords', data: { coords: @coords} do %>
    <% end %>

#@coords is defined in maps#index
#@coords = Map.all

在浏览器控制台中,我可以轻松调用:

$('#coords').data('coords')
# or to acces 1st object
$('#coords').data('coords')[0]
# or to acces its attribute
$('#coords').data('coords')[0].lat 
#Object {id: 1, vibration_level: 456, lat: "71.45543", lon: "53.43424", time_sent: "1994-05-20T00:00:00.000Z"…}
但我不能在我的Javascript中做同样的事情。我对所有这些电话都没有定义。 但是,如果我检查我的代码,我可以使用数据坐标找到我的div: 如何在js中访问我的@coords?

1 个答案:

答案 0 :(得分:-1)

如果你的js文件是这样的: app/assets/javascripts/your-js.js.erb

然后你可以使用你的变量:

<%= @coords %>

编辑:

我之前的回答是错误的,js是预编译的。 所以我的新答案是: 创建一个HTML app/views/layouts/_page_scope.html.erb

 <%
    globalPageScope = {}
    globalPageScope['coords'] = @coords if @coords
%>

<script type="text/javascript">
    document.globalPageScope = <%= raw globalPageScope.to_json %>;
</script>

然后你可以从js:

访问该变量

globalPageScope.coords