2012-06-19 2 views
0

Я использую драгоценный камень lazy_highcharts и пытаюсь настроить живые графики. Вслед за этим руководство для live charts я добавил функцию в мой контроллер, который отображает вывод JSON в этом формате [1340051521000,8]Live Charts with Highcharts

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 

Следующая У меня есть новый файл JS под названием live_update.js, где я наклеенные шаги 2. и 3. содержащий 'requestData()'

Я сделал обратный вызов с точки зрения:

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

Примечание: Я не был в состоянии назвать это от моего контроллера: f.options[:chart][:events][:load] = 'requestData'

Когда я запустил его, я получаю сообщение об ошибке: диаграмма не определена, когда она четко определена глобально в файле JS.

Это то, что я вижу в браузере Source View:

<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> 

ответ

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 
}