0

私はlazy_highchartsgemを使用しており、ライブチャートを構成しようとしています。ライブチャートに関するこのガイドに従って、JSON出力をこの形式でレンダリングする関数をコントローラーに追加しました[1340051521000,8]

def live
    x = Time.now.to_i * 1000
    y = Random.rand(11)
    #create an array and echo to JSON
    ret =[x,y]
    x=ActiveSupport::JSON
    @j=x.encode(ret)
    render :json => @j
  end

次に、live_update.jsという新しいJSファイルがあり、ここに「requestData()」を含む手順2と3を貼り付けました。

ビューからコールバックを作成しました:

 = high_chart("my_id", @h) do |c|
        requestData();

注:コントローラーから呼び出すことができませんでした:f.options[:chart][:events][:load] = 'requestData'

実行すると、エラーが発生します。JSファイルでグローバルに定義されているのに、チャートが定義されていません。

これは、ブラウザのソースビューに表示されるものです。

<script type="text/javascript">
            jQuery(function() {
                  // 1. Define JSON options
                  var options = {
                                chart: {"defaultSeriesType":"column","renderTo":"my_id","zoomType":"xy"},
                                        title: {"text":"Test"},
                                        legend: {"layout":"horizontal","style":{}},
                                        xAxis: {"type":"datetime"},
                                        yAxis: {"title":{"text":"Agents"},"labels":{},"min":"0","allowDecimals":false,"gridLineDashStyle":"LongDash"},
                                        tooltip:  {"enabled":true},
                                        credits: {"enabled":false},
                                        plotOptions: {"areaspline":{}},
                                        series: [{"name":"test","data":[]}],
                                        subtitle: {}
                                };

                  // 2. Add callbacks (non-JSON compliant)                
                  requestData();


                  // 3. Build the chart
                    var chart = new Highcharts.Chart(options);
              });
              </script>
4

1 に答える 1

0

バージョン1.1.6で動作します

f.options[:chart][:events] = {
  :load => %| function requestData(){
    $.ajax({
      url:"live",
      success: function(a){
        var c=chart.series[0], d=c.data.length>20;
        chart.series[0].addPoint(a,true,d);
        setTimeout(requestData,16e3)
      }, cache:false
    })
  }|.js_code
}
于 2012-06-27T13:53:25.033 に答える