我正試圖編寫一個簡單的應用程序來顯示圖表數據。我想在用戶加載頁面後立即顯示一些數據,因此我正在獲取Runnable
中的數據&繪圖表,如gwt-visualization Getting Started中所述。GWT - 多次調用onModuleLoad()中的方法
事情似乎工作正常,除了圖表往往會加載不止一次。以下是我的onModuleLoad()
。
private final StatisticsServiceAsync statisticsService = GWT.create(StatisticsService.class);
GWTBeanFactory factory = GWT.create(GWTBeanFactory.class);
DataTable locationData;
AnnotatedTimeLine atl;
GeoMap usMap;
TextBox storeField;
Button log10Button;
DateRange durationChartRange;
String eusrJson = null;
Button b;
HTML last1000Html;
public void onModuleLoad() {
storeField = new TextBox();
storeField.setText("Enter a store");
storeField.addKeyDownHandler(new MyKeyHandler());
b = new Button("Get Stats!");
log10Button = new Button("Show Log10 Scale");
log10Button.addClickHandler(new Log10ClickHandler());
b.addClickHandler(new MyClickHandler());
last1000Html = new HTML();
getLast1000Avg();
Runnable onLoadCallback = new Runnable() {
public void run() {
storeDurationData = DataTable.create();
storeDurationDataLog10 = DataTable.create();
RootPanel.get("storeDurationDiv").add(storeField);
RootPanel.get("storeDurationDiv").add(b);
RootPanel.get("storeDurationDiv").add(log10Button);
RootPanel.get("storeDurationDiv").add(last1000Html);
log10Button.setVisible(false);
// Get initial Data
getAvgByRegion();
getLast1000Avg();
Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
@Override
public boolean execute() {
getLast1000Avg();
return true;
}
}, 5000);
}
};
// Load the visualization api, passing the onLoadCallback to be called
// when loading is done.
VisualizationUtils.loadVisualizationApi(onLoadCallback, AnnotatedTimeLine.PACKAGE);
VisualizationUtils.loadVisualizationApi(onLoadCallback, GeoMap.PACKAGE);
}
所有的「簡單」的元素似乎得到正確填充,作爲Button
,HTML
,並TextBox
都得到適當的(這曾經是run
裏面,他們是他們現在的地方放置調試以前的錯誤的結果)。然而,GeoMap
被放置兩次,並看着日誌記錄,你可以告訴Runnable
的run
正在執行至少兩次,這似乎是合理的,但我不知道如何防止它增加兩次。
我可能搞砸了異步的東西,但我是新的和困惑。下面是我的getAvgByRegion()
方法:
private void getAvgByRegion() {
statisticsService.getEusrForRegion(new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
System.out.println(":(");
}
@Override
public void onSuccess(String result) {
createLocTable();
DataTable dt = parseEusrLocations(result);
usMap = new GeoMap(dt, createGeoMapOptions());
usMap.setSize("800px", "600px");
RootPanel.get("storeDurationDiv").add(usMap);
}
});
}
如何最好與GWT合作任何意見是值得歡迎的。
你擊中了頭部。以前,當我沒有加載GeoMap可視化API時,它抱怨說,所以我繼續按照上面的方法做。然而,正如你所建議的,這導致它加載兩次。從谷歌的例子來看,「VisualizationUtils.loadVisualizationApi」支持可變參數並不是顯而易見的。我改變了我的負載到'VisualizationUtils.loadVisualizationApi(onLoadCallback,AnnotatedTimeLine.PACKAGE,GeoMap.PACKAGE);'它的工作就像一個魅力。 – lase