バージョン 1.1.1 の gwt-visualization を使用する MVP GWT 2.5.1 アプリがあります。私のビューには 2 つButton
の と a がありVerticalPanel
ます (プレゼンターは としてアクセスしますdisplay.getPanel()
)。1 つのボタンは に を追加し、もう 1 つのボタンはPieChart
それをVerticalPanel
削除します。プレゼンターはPieChart
参照を として保持するWidget
ため、参照がいつ追加/削除されたかがわかります。に初期化されnull
ます。
クロムの開発ツールをチェックして、追加/削除コードが DOM リークを作成していないことを確認しました。しかし、PieChart
が削除された後、その要素は切り離された DOM ツリーに残され、すべて赤で色分けされていました。Label
の代わりに a を使用して同じ追加/削除コードを試したところ、削除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;
}