0

我有一个 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​​ 代码之前发出警报,它起作用了。所以它在嵌入红宝石的路线上失败了。我在这个论坛上看到人们回答说我写的嵌入行是合法的。任何想法为什么这不起作用?

4

2 回答 2

5

您仍然需要遵守正常的 Javascript 语法规则。 var x = <%= @sectionhash["name"] %>;将打印:var x = stringush;由于没有名为 stringush 的变量,这是无效的。您需要像这样引用 JS 字符串:

var x = '<%= @sectionhash["name"] %>';

这将打印:var x = 'stringush';这是你想要的。

于 2013-02-15T17:53:36.267 回答
2

我认为您正在寻找的是xstring "stringush"。为此,将您的 javascript 更改为:

<script type="text/javascript">
    var x = '<%= @sectionhash["name"] %>';
    alert(x);
</script>

您需要在其中引用,否则 javascript 将被引用,var x = stringush;并且由于没有名为 的变量stringush,x 将是未定义的。

于 2013-02-15T17:53:27.233 回答