在GWT2.5自定义单元格中呈现Google图表(我使用UiRenderer)

在GWT2.5自定义单元格中呈现Google图表(我使用UiRenderer),gwt,cell,google-visualization,gwt-celltable,Gwt,Cell,Google Visualization,Gwt Celltable,我使用的是GWT2.5RC1和GAE1.7.2。 我使用UiRenderer创建了一个自定义单元格。 我想使用Google chart Tools API for GWT呈现图表 下面是render方法的片段,它不起作用。 有人知道如何在自定义单元格中呈现google图表吗? 如果他/她能给我一些指导或示例代码,我将不胜感激。 提前谢谢 @Override public void render(com.google.gwt.cell.client.Cell.Context con

我使用的是GWT2.5RC1和GAE1.7.2。 我使用UiRenderer创建了一个自定义单元格。
我想使用Google chart Tools API for GWT呈现图表
下面是render方法的片段,它不起作用。

有人知道如何在自定义单元格中呈现google图表吗?

如果他/她能给我一些指导或示例代码,我将不胜感激。 提前谢谢

    @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);
}

看起来你有比赛条件。调用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);
}

不幸的是,它也不起作用。行“渲染器渲染(sb);”应该在onLoadCallback(…)方法之外才能正常工作。欢迎其他想法。当您在sb.appendHtmlConstant(test.getElement().getInnerHTML())行上设置断点时,测试元素的内容是什么?测试元素的内容是空的。pie的内容是什么?开始调试:)饼图实例化为ok。如果我在onLoadCallback(…)方法之外实例化测试元素[HTMLPanel test=new HTMLPanel(“”;]),当我在onLoadCallback(…)方法中尝试.add(小部件小部件)方法时,测试元素为null,不添加任何内容。但是,若我在onLoadCallback(…)方法中实例化了测试元素,那个么测试元素内容设置正确。调用sb.appendHtmlConstant(test.getElement().getInnerHTML())之后;我尝试查看sb的内容,结果返回null!