Рендеринг 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);
}