У меня есть приложение MVP GWT 2.5.1 с использованием версии 1.1.1 gwt-визуализации. Мой вид имеет два 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;
}