我有一个ruby函数创建一个哈希的实例变量,我在javascript中访问它的值时遇到了麻烦。
这是我的控制者:
class TransferController < ApplicationController
def index
require 'json'
#@transfers = Transfer.select("transfer_id,section_id,sum(net) as net").group("transfer_id,section_id").having("sum(net) <> ?",0).order("transfer_id ASC")
@transfers = Transfer.select("section_id,section_name,sum(net) as net").group("section_id,section_name").order("section_id ASC")
h = Hash.new()
a = []
@transfers.each do |section|
h["name"] = section.section_name
h["size"] = section.net
a.insert(h)
end
@sectionhash = Hash.new()
@sectionhash["name"] = "stringush"
@sectionhash["children"] = a
end
end
这是我的观点:
<h1><%= @sectionhash["name"] %></h1>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script type="text/javascript">
var x = <%= @sectionhash["name"] %>;
alert(x);
</script>
我得到的重点是,它显示了哈希内部的值,但javascript什么也没做。我甚至尝试在分配ruby代码之前发出警报并且它有效。所以它与嵌入式红宝石的线路失败了。 我见过人们在这个论坛上回答我写的嵌入式线是合法的。 任何想法为什么这不起作用?
答案 0 :(得分:5)
您仍然需要遵守常规的Javascript synax规则。
var x = <%= @sectionhash["name"] %>;
将打印:var x = stringush;
由于没有名为stringush的变量而无效。你需要像这样引用JS字符串:
var x = '<%= @sectionhash["name"] %>';
这将打印:var x = 'stringush';
这就是你想要的。
答案 1 :(得分:2)
我认为您要找的是x
为字符串"stringush"
。为此,请将您的javascript更改为:
<script type="text/javascript">
var x = '<%= @sectionhash["name"] %>';
alert(x);
</script>
你需要在那里引用或者javascript将是var x = stringush;
,因为没有名为stringush
的变量,x将是未定义的。