2015-07-27 2 views
0

Я пытаюсь написать метод в GWT, чтобы переопределить функцию series.show для всех серий Highcharts, на шоу. Я хочу по существу копировать серию, удалить серию из диаграммы и прочитал его так, чтобы показ серии перерисовывал строку (вместо поведения по умолчанию, когда линия появляется и диаграмма перерисовывается). У меня это моделируется в Jsfiddle: http://jsfiddle.net/ax3o8uf3/16/Серия удаления и считывания проблем на диаграмме

Я использовал MXII-программу для GWT и использовал метод setSeriesPlotOptions(), чтобы установить обработчик события сериала и вызвать этот собственный метод изнутри onShow().

public static native void showSeries(JavaScriptObject series, JavaScriptObject chart) /*-{ 
     var options = series.options; 
     options.color = series.color; 
     options.index = series.index; 
     options.marker.symbol = series.symbol; 

     series.remove(); 

     options.visible = true; 
     chart.addSeries(options); 
    }-*/; 

и все работает нормально. Затем мы обновили файлы проекта и файлы highstock.js, и это сломало все. Теперь скрытие и показ серии в легенде заставит ее перерисовать отлично для первой серии, для которой вы это делаете, но как только вы попытаетесь показать другую серию, она разрывается и возвращается к функциональности по умолчанию для всех серий. Любые идеи о том, что я делаю неправильно или что может заставить его не работать после показа второй серии на графике?

ответ

0

Я не уверен, почему, но по какой-то причине, используя seriesShowEventHandler() вызывается его сломать после попытки показать больше одной серии, то решение, которое я придумал было что-то вроде этого:

setSeriesPlotOptions(new SeriesPlotOptions().setSeriesLegendItemClickEventHandler(new SeriesLegendItemClickEventHandler() { 
     @Override 
     public boolean onClick(SeriesLegendItemClickEvent seriesLegendItemClickEvent) { 

      Series series = getSeries(seriesLegendItemClickEvent.getSeriesId()); 

      if(seriesLegendItemClickEvent.isVisible()) { 
       series.hide(); 
      } else if((series.getOptions().get("type").toString()).equals("\"line\"")){ 
       removeAndReAddSeries(getNativeChart(), series.getNativeSeries()); 
      } else { 
       series.show(); 
      } 
      return false; 
     } 

    }));