是否有一种“正确”的方式来添加/删除PieChart?

时间:2013-11-21 19:11:40

标签: gwt google-visualization google-chrome-devtools gwt-visualization

我使用的是gwt-visualization 1.1.1版的MVP GWT 2.5.1应用程序。我的观点有两个Button和一个VerticalPanel(由演示者访问display.getPanel())。一个按钮会将PieChart添加到VerticalPanel,另一个按钮会将其删除。演示者将PieChart引用保存为Widget,以便它知道何时添加/删除它。它被初始化为null

我检查了chrome的开发工具,以确保添加/删除代码没有创建DOM泄漏。但是在PieChart被删除之后,它的元素被遗留在一个独立的DOM树中,所有颜色都是红色的。当我使用Label而不是PieChart尝试使用相同的添加/删除代码时,删除后没有剩余的分离DOM树。

我的问题是:在添加或删除PieChart时,我做错了什么?也许gwt-visualization有一些我不知道的处理方法,但我的google-fu无法产生答案。

演示者添加/删除代码如下:

display.getAddChartButton().addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
        if (widget == null) {
            Runnable onLoadCallback = new Runnable() {
                public void run() {
                    PieChart content = new PieChart(createTable(), createOptions());
                    // Label content = new Label("Content");
                    display.getPanel().add(content);
                    widget = content;
                }
            };
            VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);
        }
    }
});
display.getRemoveChartButton().addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
        if (widget != null) {
            display.getPanel().remove(widget);
            widget = null;
        }
    }
});

private AbstractDataTable createTable() {
    DataTable data = DataTable.create();
    data.addColumn(ColumnType.STRING, "Task");
    data.addColumn(ColumnType.NUMBER, "Hours per Day");
    data.addRows(2);
    data.setValue(0, 0, "Work");
    data.setValue(0, 1, 14);
    data.setValue(1, 0, "Sleep");
    data.setValue(1, 1, 10);
    return data;
}

private Options createOptions() {
    Options options = Options.create();
    options.setWidth(400);
    options.setHeight(240);
    options.setTitle("My Daily Activities");
    return options;
}

1 个答案:

答案 0 :(得分:0)

我已经将内存泄漏追溯到Google Chart API本身。 The team is aware of memory leak issues