简体   繁体   English

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

[英]Pass data from Controller to Javascript in Rails

I am trying to use Google Charts API following this example Google Charts Quick Start 我尝试按照此示例Google Charts快速入门使用Google Charts API

As you see the data is created in the JS as: 如您所见,数据在JS中创建为:

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

My question is: 我的问题是:

If in my controller I get data... How can I pass it to the Javascript of my template file? 如果在我的控制器中我得到了数据,该如何将其传递给模板文件的Javascript? I have this example JS hooked up in the head of my index.html.erb file. 我在index.html.erb文件的开头挂了这个示例JS。

You would just need to create a ruby variable in your controller action to hold your values and generate the javascript in the view using them values using <%= %> tags. 您只需要在控制器操作中创建一个ruby变量来保存您的值,并使用它们使用<%=%>标签使用它们在视图中生成javascript。

Example: @values would be a name value collection. 示例:@values将是一个名称值集合。

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

Example using a js function. 使用js函数的示例。

index.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: Note that I'm using jquery to call InitPage when the page loads, if you're not using jquery your InitPage call would probably be in the onload of the body tag or something similar. index.html.erb:请注意,我在页面加载时使用jquery调用InitPage,如果不使用jquery,则您的InitPage调用可能在body标签或类似标签的加载中。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM