问题删除和读取系列图表

时间:2015-07-27 20:32:10

标签: gwt highcharts jsni

我正在尝试在GWT中编写一个方法来覆盖所有Highcharts系列的series.show函数,显示我想基本上复制该系列,从图表中删除该系列,并读取它以便显示该系列将重绘该行(而不是显示该行和图表重绘的默认行为)。我在Jsfiddle中建模:http://jsfiddle.net/ax3o8uf3/16/

我使用了Moxie的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);
    }-*/;

一切正常。然后我们更新了项目的highcharts和highstock.js文件,它打破了一切。现在隐藏并在图例中显示一个系列将导致它为您执行的第一个系列重绘得很好,但是一旦您尝试显示另一个系列,它就会中断并返回到所有系列的默认功能。在图表上显示第二个系列之后,对于我做错了什么或可能导致它不起作用的任何想法?

1 个答案:

答案 0 :(得分:0)

I'm not sure why but for some reason using the seriesShowEventHandler() caused it to break after trying to show more than one series, the solution I came up with was something like this:

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

    }));