2013-12-16 77 views
2

我想使用gwt-highchart(使用最新的gwt-highchart 1.6.0和Highstock 2.3.4版本)添加系列到我的圖表應用程序。一切似乎都很好,直到第三個系列。當我嘗試添加第三個我得到這個錯誤:HighCharts股票圖表錯誤代碼18

com.google.gwt.core.client.JavaScriptException: (String) 
@org.moxieapps.gwt.highcharts.client.BaseChart::nativeAddSeries(Lcom/google/gwt/core 
/client/JavaScriptObject;Lcom/google/gwt/core/client/JavaScriptObject;ZZ)([JavaScript 
object(4953), JavaScript object(5135), bool: true, bool: true]): Highcharts error #18: 
www.highcharts.com/errors/18 

這裏是我的代碼(內循環運行):

  // Create a new serie with a new yAxis 
     Series newSeries = chart.createSeries().setYAxis(index).setPlotOptions(new LinePlotOptions().setColor(tag.getColor())); 

     // Set new yAxis options 
     chart.getYAxis(index).setPlotLines(chart.getYAxis(index).createPlotLine().setValue(0).setWidth(1).setColor(tag.getColor())).setLabels(new YAxisLabels().setEnabled(false)).setTickLength(0).setOffset(60).setStartOnTick(false) 
       .setEndOnTick(false).setGridLineWidth(0).setMaxPadding(DEFAULT_YAXIS_MAX_PADDING).setMinPadding(DEFAULT_YAXIS_MIN_PADDING) 
       .setAxisTitle(new AxisTitle().setText(null).setStyle(new Style().setColor(tag.getColor()))); 

     // Add the serie to the chart 
     chart.addSeries(newSeries.setName("Test " + index)); 

前兩個系列都OK,因爲我之前,但三分之一的人說一個拋出上面的異常(當我調試應用程序時,我可以看到新創建的yAxis引用)。

這裏是會拋出異常的行:

chart.addSeries(newSeries.setName("Test " + index)); 

感謝

+0

如果您不添加第3個系列,您是否得到圖表? Highcharts錯誤#18:請求的軸不存在。你在同一行中調用兩次'.setPlotLines()'。一旦選擇了,另一次沒有。這可以嗎? –

+0

感謝@AntoJurković爲你的超級快速評論:)如果我不添加第3個系列,它幾乎沒有問題(但有時我會看到範圍選擇欄中的第二個系列!)順便說一句,我刪除了無參數調用'.setPlotLines()'但沒有任何改變。 – ngc4151

回答

2

我已經理解了它終於來了!

GWT-HighCharts似乎是問題所在。它根本不會將新的YAxis添加到圖表中。所以你必須通過像這樣的本地調用來添加YAxis;

private static native void nativeAddAxis(JavaScriptObject chart, JavaScriptObject axisOptions, boolean isX, boolean redraw, boolean animationFlag) /*-{ 
    chart.addAxis(axisOptions, isX, redraw, animationFlag); 
}-*/; 

在添加新系列之前,請調用此本機方法。

  // Create new series 
     Series newSeries = chart.createSeries().setYAxis(index); 
     newSeries.setPlotOptions(new LinePlotOptions().setColor(tag.getColor())); 
     newSeries.setName(index + 1 + ") "); 

     // Create a new YAxis 
     YAxis yAxis = chart.getYAxis(index).setPlotLines(chart.getYAxis(index).createPlotLine().setValue(0).setWidth(1).setColor(tag.getColor())).setLabels(new YAxisLabels().setEnabled(false)).setTickLength(0).setOffset(60) 
       .setStartOnTick(false).setEndOnTick(false).setGridLineWidth(0).setPlotLines().setMaxPadding(DEFAULT_YAXIS_MAX_PADDING).setMinPadding(DEFAULT_YAXIS_MIN_PADDING) 
       .setAxisTitle(new AxisTitle().setText(null).setStyle(new Style().setColor(tag.getColor()))); 

     // IMPORTANT!: New YAxis must be added to the chart via native calls since gwt-highcharts wrapper doesn't do that properly! 
     nativeAddAxis(chart.getNativeChart(), yAxis.getOptions().getJavaScriptObject(), false, false, false); 

     // Physical attach 
     chart.addSeries(newSeries); 
1

請檢查索引值。 如果索引大於軸計數,則可能發生此錯誤

highcharts錯誤#18指示嘗試訪問的軸不存在。

這裏是鏈接http://www.highcharts.com/errors/18

希望這將有助於你

+0

我檢查了索引值,沒有錯。實際上,當我調試應用程序時,我可以在圖表實例中看到新創建的YAxises,但是當我嘗試添加該系列時,找不到關聯的軸(但它在那裏,我可以在調試模式下看到它) – ngc4151

2

以下是此類錯誤的原因:

如果使用GWT-HighCharts包裝,必須在添加圖表,DOM之前進行配置!看起來,將它添加到DOM後,任何配置更改似乎都不起作用!

快樂編碼!