我使用的是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;
}