Рендеринг Google Chart в пользовательской ячейке GWT 2.5 (я использовал UiRenderer)

Я использую GWT 2.5 RC1 и GAE 1.7.2. Я создал пользовательскую ячейку, используя UiRenderer, рендеринг HTML для ячеек.
Я хочу отобразить диаграмму, используя Google Chart Tools API для GWT. Начало работы. Использование Google Chart Tools с GWT.
Ниже приведен фрагмент метода рендеринга, который не работает.

Кто-нибудь знает, как отрендерить гугл-чарт в пользовательской ячейке?

Я был бы признателен, если бы он / она дал мне несколько указаний или пример кода. Заранее спасибо.

    @Override
public void render(com.google.gwt.cell.client.Cell.Context context, Value value, final SafeHtmlBuilder sb) {
    final HTMLPanel test = new HTMLPanel("");
    Runnable onLoadCallback = new Runnable() {
    public void run() {
        //Panel panel = RootPanel.get();

        // Create a pie chart visualization.
        PieChart pie = new PieChart(createTable(), createOptions());

        pie.addSelectHandler(GoogleCharts.createSelectHandler(pie));
        test.add(pie);
        }
    };
    // Load the visualization api, passing the onLoadCallback to be called
    // when loading is done.
    VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);

    sb.appendHtmlConstant(test.getElement().getInnerHTML());
    renderer.render(sb);
}

1 ответ

Похоже, у вас есть состояние гонки. Когда вы вызываете sb.appendHTMLConstant, тестовый элемент, вероятно, пуст, потому что onLoadCallback еще не был запущен. Если вы переместите последние две строки в конец обратного вызова, это устранит условие гонки.

@Override
public void render(com.google.gwt.cell.client.Cell.Context context, Value value, final SafeHtmlBuilder sb) {
    final HTMLPanel test = new HTMLPanel("");

    Runnable onLoadCallback = new Runnable() {
        @Override
        public void run() {
            // Create a pie chart visualization.
            PieChart pie = new PieChart(createTable(), createOptions());
            pie.addSelectHandler(GoogleCharts.createSelectHandler(pie));
            test.add(pie);

            sb.appendHtmlConstant(test.getElement().getInnerHTML());
            renderer.render(sb);
        }
    };

    // Load the visualization api, passing the onLoadCallback to be called
    // when loading is done.
    VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);
}
Другие вопросы по тегам