Отображение нескольких графиков с визуализацией GWT - PullRequest
1 голос
/ 18 ноября 2011

Этот бит кода (ниже) работает для отображения 1..n LineCharts на экране без инцидентов. Мне интересно, насколько это эффективно. Я звоню VisualizationsUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE) каждый раз. Должно ли это быть сделано таким образом?

public void getData(List<GraphWrapper> graphWrapperList) {
    for (GraphWrapper graphWrapper : graphWrapperList) {
        populateResources.populateResourcesService(graphWrapper.getSeriesWrapperList(),
                new AsyncCallback<GraphWrapper>() {
                    public void onFailure(Throwable caught) {
                        displayDialogBox("*** An Error Occurred ***", caught.toString());
                    }

                    public void onSuccess(final GraphWrapper response) {
                        Runnable onLoadCallback = new Runnable() {
                            private Widget chart;

                            public void run() {
                                this.chart = new LineChart(createTable(response), createOptions(response));
                                graphPanel.add(this.chart);
                            }
                        };
                        VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE);
                    }
                });
    }
}

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

Загружая LineChart.PACKAGE, вы можете использовать только один тип диаграммы (LineChart).Поскольку вы можете загружать только один «пакет» за раз, вы застряли с этим решением.Попробуйте это:

VisualizationUtils.loadVisualizationApi(onLoadCallback, CoreChart.PACKAGE);

Используя пакет CoreChart, вы можете загрузить все, что является потомком CoreChart (линия, полоса, круговая диаграмма, площадь, столбец и разброс).Вы также можете загрузить любое число / комбинацию графиков.Кроме того, вам не нужно каждый раз вызывать метод loadVisualizationApi(...), а только при первом создании диаграммы.Каждый последующий будет использовать эту библиотеку.

1 голос
/ 18 ноября 2011

Я думаю, что загрузки пакета LineChart один раз должно быть достаточно.Вы пытались запустить цикл в обратном вызове?

public void getData(List<GraphWrapper> graphWrapperList) {
Runnable onLoadCallback = new Runnable() {
    public void run() {
            for (GraphWrapper graphWrapper : graphWrapperList) {
                populateResources.populateResourcesService(graphWrapper.getSeriesWrapperList(),
                new AsyncCallback<GraphWrapper>() {
                        public void onFailure(Throwable caught) {
                            displayDialogBox("*** An Error Occurred ***", caught.toString());
                        }
                        public void onSuccess(final GraphWrapper response) {
                            private Widget chart;
                            this.chart = new LineChart(createTable(response), createOptions(response));
                            graphPanel.add(this.chart);                  
                        }
                });
            }
        }
    };
VisualizationUtils.loadVisualizationApi(onLoadCallback, LineChart.PACKAGE);
}
...