2013-03-21 1 views
2

Я создаю highchart с использованием lazy_highcharts gem. Я хотел бы использовать обратный вызов afterSetExtremes для восстановления некоторых других данных на странице при масштабировании. Я попробовал несколько способов, в настоящее время пытается:afterSetExtremes callback для highcharts

@chart = LazyHighCharts::HighChart.new('graph') do |f| 
        f.chart(:zoomType =>'x', :defaultSeriesType => 'spline') 
        f.x_axis(:type=> 'datetime', :events => {:afterSetExtremes => "functon(event){alert('something')}"}) 
end 

Но это дает мне ошибку

Uncaught TypeError: Object functon(event){alert('something')} has no method 'apply' 

в консоли JavaScript когда масштаб диаграммы. Я предполагаю, что это связано с тем, что генератор неправильно настроил функцию обратного вызова, установив ее как строку вместо того, чтобы интерпретировать ее как функцию.

Я также попытался установить его на свой объект диаграммы с помощью javascript после создания, но до сих пор им не повезло. Несколько попыток ниже

chart_my_id4.xAxis.events = {setExtremes: function(event) { 
     alert('set extremes'); 
    }}; 
chart_my_id4.xAxis[1].events = {setExtremes: function(event) { 
     alert('set extremes'); 
    }}; 

Не повезло и там.

Любое понимание оценено, спасибо.

ответ

0

Я не знаком с этим драгоценным камнем, но в стандартных Highcharts 3.0 вы можете добавить событие таким образом:

chart.yAxis[0].update({ 
    events: { 
     afterSetExtremes: function(){ 
      alert('x'); 
     } 
    } 
}); 
+0

Хм, выглядит ленивым Highcharts в настоящее время на основе версии v2.3.3, и что не работает для меня (ни один метод 'Обновить'). Посмотрите, как получить новейшую версию. Возможно, придется отказаться от драгоценного камня и пойти прямо с JS, но человек сделал все, чтобы оставаться в Ruby. – Peck

+0

Поскольку doc для этого драгоценного камня действительно ограничен (в действительности его не существует), не могли бы вы показать пример, как добавить форматирование для всплывающей подсказки или datalabels? Что я могу сказать наверняка, так это то, что возвращается 'object' (hash) вместо' function'. –

3

не слишком хорошо знакомы с ... рубином, но я посмотрел на источнике на GitHub, и они делают следующее, когда они устанавливают функции в атрибуты:

:formatter => "function() { return this.x; }".js_code 

было бы попробовать стоит добавить, что .js_code и посмотреть, если это работает, так что вы в конечном итоге с:

@chart = LazyHighCharts::HighChart.new('graph') do |f| 
    f.chart(:zoomType =>'x', :defaultSeriesType => 'spline') 
    f.x_axis(:type=> 'datetime', :events => { 
    :afterSetExtremes => "functon(event){alert('something')}".js_code 
    }) 
end 
+0

Я попробую. После того, как я вошел в это какое-то время, я оставил его и отправился прямо в JS, заработал все. но я постараюсь повернуть назад и проверить это. Было бы неплохо, если бы это было так просто, как сделать работу. – Peck

+0

работает отлично! –

0

Вы можете сделать это так:

LazyHighCharts::HighChart.new('graph') do |f| 
    ... 
    f.xAxis(:events => { :afterSetExtremes => after_set_extremes_function}) 
end 

-

def after_set_extremes_function 
    %|function(e) { 
    chart = Highcharts.charts[0]; 
    chart.showLoading('Loading data...'); 
    $.getJSON("/path_to_your_action?start="+Math.round(e.min)+"&end="+Math.round(e.max), function(data) { 
      chart.series[0].setData(data); 
      chart.hideLoading(); 
     } 
     } 
    ); 
    }|.js_code 
end