Обратный вызов afterSetExtremes для highcharts

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

 @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');
    }};

Там тоже не повезло.

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


person Peck    schedule 21.03.2013    source источник


Ответы (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
person Scott Gearhart    schedule 29.03.2013
comment
Я попробую это. Повозившись с этим какое-то время, я отказался от этого и сразу перешел к JS, и все заработало. но я постараюсь вернуться назад и проверить это. Было бы хорошо, если бы это было так просто, чтобы заставить работать. - person Peck; 02.04.2013

Я не знаком с этой жемчужиной, но в стандартном Highcharts 3.0 вы можете добавить событие таким образом:

chart.yAxis[0].update({
    events: {
        afterSetExtremes: function(){
            alert('x');
        }
    }
});
person Paweł Fus    schedule 22.03.2013
comment
Хм, похоже, lazy highcharts в настоящее время основан на версии v2.3.3, и это не работает для меня (нет метода «обновить»). Увидим о получении новейшей версии. Возможно, придется отказаться от драгоценного камня и перейти непосредственно к JS, но человеку было легко оставаться на Ruby. - person Peck; 23.03.2013
comment
Поскольку документ для этого драгоценного камня действительно ограничен (на самом деле, не существует), не могли бы вы показать пример, как вы добавляете средство форматирования для всплывающей подсказки или меток данных? Что я могу сказать наверняка, так это то, что возвращается object(хэш), а не function. - person Paweł Fus; 25.03.2013

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

 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
person Elendir    schedule 23.09.2013