0

我有一個使用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; 
} 

回答

相關問題