2012-09-03 80 views
0

我是RoR和Web应用程序开发的新手,我使用Rails 3.2.3,我想在Highcharts中使用红宝石数组,并且在我的视图文件中使用Haml。从Haml调用外部javascript中的红宝石数组

我在控制器中定义这样一个数组:

... 
def show 
    ... 
    @close_array = DailyQuote.where(company_id: @company.id).map(&:closing_price) 
end 

,我已经在我的Haml的视图文件中声明它。

%body 
    - close_array_j = "#{@close_array.inspect}" 
    =javascript_include_tag :build_chart 
    #container{:style => "min-width: 300px; height: 300px; margin: 0 auto"} 

现在我想使用这个数组,close_array_j,我已经在一个名为单独的文件build_chart.js编写的代码为Highcharts图中:

$(function() { 
    var chart; 
    $(document).ready(function() { 
    chart = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'container', 
     }, 
... 
    series: [{ 
     name: 'Closing Price', 
     data: $('#close_array_j') 
    }] 
... 

的highcharts图是被呈现没有数据。顺便说一句,我不知道红宝石或引入haml或者JS非常好,你可能会说...

回答

3

可以打印变量像这样的HAML

%script 
    != "close_array_j = #{@close_array.to_json};" 

,然后在JavaScript中使用它

... 
series: [{ 
    name: 'Closing Price', 
    data: close_array_j 
}] 
... 
+0

那正是我需要的,谢谢Loken! – user1642579

0

您在haml视图文件中执行的变量赋值没有效果。它不会自动应用于您的JavaScript文件。

你可以把它包装在脚本标签中。这里的erb版本:

<%= javascript_tag do %> 
close_array_j = = '<%= j @close_array.to_json %>'; 
<% end %> 

但是,还有其他更清洁的技术。一种方法是利用HTML5数据属性来嵌入数据,比如你的数据。使用Jquery很容易。

我建议你观看瑞恩贝特的屏幕录像,了解如何以各种方式将数据传递给JavaScript。

http://railscasts.com/episodes/324-passing-data-to-javascript?view=asciicast