Я пытаюсь написать простое приложение для отображения данных диаграммы. Я хочу отобразить некоторые данные, как только пользователь загрузит страницу, поэтому я получаю данные & чертежных таблиц внутри 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
выполняется как минимум дважды, что кажется разумным, но я не знаю, как удержать его от добавления дважды.
Я, вероятно, что-то напугаю с помощью материала Async, но я новичок и смущен. Ниже мой 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 приветствуется.
Вы ударите ноготь по голове. Раньше он жаловался, когда я не загружал API визуализации GeoMap, поэтому я пошел дальше и сделал это, как указано выше. Однако, как вы предположили, это вызывало нагрузку в два раза. Исходя из примера Google, не сразу видно, что «VisualizationUtils.loadVisualizationApi» поддерживает варгары. Я изменил свой груз на «VisualizationUtils.loadVisualizationApi (onLoadCallback, AnnotatedTimeLine.PACKAGE, GeoMap.PACKAGE)», и он работает как шарм. – lase