0

チャート データを表示する簡単なアプリケーションを作成しようとしています。ユーザーがページをロードするとすぐにいくつかのデータを表示したいのでRunnable、gwt-visualization Getting Startedで説明されているように、データと描画テーブルを内部に取得しています。

グラフが複数回読み込まれる傾向があることを除けば、問題なく動作しているようです。以下は私の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);
}

ButtonHTML、およびすべてが適切に配置されるため、「単純な」要素はすべて正しく設定されているように見えTextBoxます (以前は の内部にありrunましたが、以前のエラーをデバッグした結果、現在の場所になっています)。ただし、 はGeoMap2 回配置され、ログを見ると、 が少なくとも 2 回実行されていることRunnablerunわかります。これは合理的に思えますが、2 回追加しないようにする方法がわかりません。

私はおそらく非同期のもので何かを台無しにしていますが、私は新しくて混乱しています。以下は私の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 の最適な使用方法に関するアドバイスは大歓迎です。

4

1 に答える 1

1

VisualizationUtils.loadVisualizationApiしたがって、 2回呼び出すと、 がonLoadCallback2回実行されます(GWT Google Apisはわかりません。これは仮定です)。

onLoadCallbackを呼び出しgetAvgByRegionて、1 つも 2 回呼び出されるようにします。データを取得し、コールバックで新しいGeoMapを作成して に追加するため、画面RootPanel.get("storeDurationDiv")に 2 つの が表示されます。GeoMap

他のウィジェット (storeFieldなど) は 1 回だけ作成さaddれるため、新しいウィジェット (このケースは同じです)

于 2013-10-16T09:49:25.897 に答える