将数据从Controller传递到Rails中的Javascript

时间:2012-06-05 17:20:57

标签: javascript ruby-on-rails-3

我正在尝试使用此示例Google Charts API

后的Google Charts Quick Start

如您所见,数据在JS中创建为:

data.addColumn('string', 'Topping');
        data.addColumn('number', 'Slices');
        data.addRows([
          ['Mushrooms', 3],
          ['Onions', 1],
          ['Olives', 1],
          ['Zucchini', 1],
          ['Pepperoni', 2]
        ]);

我的问题是:

如果在我的控制器中我获取数据......如何将其传递给我的模板文件的Javascript?我把这个例子连接到我的index.html.erb文件的头部。

1 个答案:

答案 0 :(得分:0)

您只需要在控制器操作中创建一个ruby变量来保存您的值并使用<%=%>使用它们在视图中生成javascript。标签

实施例: @values将是一个名称值集合。

data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows([
    <% @values.each do |v| %>
        ['<%= v.name %>', <%= v.value %>],
    <% end %>
    ]);

使用js函数的示例。

index.js:

var values;

function InitPage(valuesFromView)
{
    values = valuesFromView;
}

function InitData()
{
    data.addColumn('string', 'Topping');
    data.addColumn('number', 'Slices');
    data.addRows(values);
}

index.html.erb:注意我在页面加载时使用jquery来调用InitPage,如果你没有使用jquery,你的InitPage调用可能会出现在body标签的onload或者类似的东西上。

<script>
    $(document).ready(function() {
        InitPage([
           <% @values.each do |v| %>
               ['<%= v.name %>', <%= v.value %>],
           <% end %>
        ]);
    });
</script>