[英]Passing Rails variable to JavaScript
我想将变量从Rails控制器传递到JavaScript文件。 我找到了一些解决方案,现在有:
# controller def index @coords = Map.all end #view <%= content_tag 'div', id: 'coords', data: {coords: @coords } do %> <% end %> #javascript alert($('#coords').data(coords));
$('#coords').data(coords)
返回一个对象Object
。
如何在javascript中访问coords
的特定属性,例如coord.lat
等? 另外, @coords
会自动转换为JSON
?
注意:我不能使用gon
gem。 我认为Rails 4.2不支持它。 所以我需要一个没有宝石的解决方案。
在这里我怎么用宝石gon
与轨道-4.2.0。 没什么特别的:
# Gemfile.lock where rails binded to version 4.2.0
gon (5.2.3)
actionpack (>= 2.3.0)
json
multi_json
request_store (>= 1.0.5)
....
PATH
remote: engines/mobile_api
specs:
mobile_api (0.1)
itunes-receipt
rails (~> 4.2.0)
# Gemfile
source 'http://rubygems.org'
gem 'rails', '4.2.0'
gem 'gon'
# layout main.html.slim
doctype html
html
head
meta charset="utf-8"
= include_gon
# main_controller.rb (In the controller)
class MainController < ApplicationBaseController
before_action :start_marketing_split_test
layout 'main'
# ... actions here
def start_marketing_split_test
split_test_name = 'ab_test_1'
alternatives_loader =
Marketing::AB::AlternativesLoader.new(split_test_name)
alternative = ab_test(split_test_name,
alternatives_loader.alternatives)
gon.push({"#{split_test_name}" => JSON.parse(alternative)})
end
============================
但是,如果您需要不带gon
解决方案,则可以在后端模板中传递变量:
例如:
# layouts/application.html.slim
doctype html
html
head
meta charset="utf-8"
title
body
javascript:
window.app_options = {
'flash_alert': "#{raw(flash[:alert])}",
'flash_warning': "#{raw(flash[:warning])}",
'flash_notice': "#{raw(flash[:notice])}",
'current_user_id': "#{current_user.try(:id)}",
'current_user_phone': "#{current_user.try(:phone)}"
};
使用jQuery .data(key)
检索数据属性值时,您使用的key
应该是String
。 是的, data: { coords: @coords}
自动将@coords
转换为JSON字符串。 因此,如果您这样称呼它,它应该对您有用:
$('#coords').data('coords');
# Returns array of JavaScript coord objects.
$('#coords').data('coords')[0].id;
# Returns first coord's id.
像下面这样使用辅助方法呢?
<%= content_tag 'div', id: 'coords', data: <%= json_for @coords%> do %> module ApplicationHelper def json_for(target_model) target_model.to_json #generates a json object end end
您可以在视图文件中使用
<%= javascript_tag do %>
var1 = @coords.lat
var2 = @coords.lgt
<% end %>
那么您可以通过javascript代码访问var1和var2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.