我有一個使用gwt-visualization版本1.1.1的MVP GWT 2.5.1應用程序。我的觀點有兩個Button
s和一個VerticalPanel
(由發言人作爲display.getPanel()
訪問)。一個按鈕將PieChart
添加到VerticalPanel
,另一個按鈕將其刪除。演示者將PieChart
引用保存爲Widget
,以便它知道它何時被添加/刪除。它被初始化爲null
。是否有「正確」的方式來添加/刪除PieChart?
我檢查了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;
}