2011-09-30 159 views
1

從GWT 2.3升級到2.4導致擴展CellTable的一個類中的客戶端異常。一直沒有功能損失,但例外是不斷髮展的煩惱。GWT 2.4 CellTable問題

com.google.gwt.core.client.JavaScriptException:(類型錯誤):this.insertBefore不是一個函數

我已經確定導致此行,雖然異常不會拋出,直到表格稍後渲染。在行更改處理程序中,當CellTable中沒有行時,MyCellTable將刪除標題元素。以下是導致2.4中出現異常的一些示例代碼,但不是2.3中的異常。

CellTable<String> table = new CellTable<String>(); 

table.addColumn(new TextColumn<String>() { 
     @Override 
     public String getValue(String object) { 
      return object; 
     } 
    }, "Col"); 

List<String> list = new ArrayList<String>(); 
list.add("abc"); 
list.add("def"); 
table.setRowData(list); 

NodeList<Element> els = table.getElement().getElementsByTagName("THEAD"); 
if (els.getLength() == 0) { 
    return; 
} 

final Element e = els.getItem(0); 
e.removeFromParent(); 

降級到GWT 2.3可以解決問題。我嘗試調用headerElement.setAttribute(「style」,「display:none」)而不是刪除元素,但看起來不一樣(它仍然保留幾個像素)。我知道創建一個CellTable然後撕掉它的一部分可能是一個不好的做法。

GWT 2.4中是否有可能導致此問題的已知更改?任何人都可以想到解決方法嗎?

回答

2

您可以通過在celltable的「thead」css屬性上使用CSS屬性「display:none」來實現相同的結果(隱藏標頭)。

方法如下:

1.創建一個含有以下條目的css文件:

Globalstyles.css:

.hiddenHeader thead { 
     display: none; 
    } 

2.本文件添加到客戶端資源包:

GlobalResources.java

public interface GlobalResources extends ClientBundle { 
     public static final GlobalResources RESOURCE = GWT.create(GlobalResources.class); 

     @Source("GlobalStyles.css") 
     GlobalStylesheet styles(); 

    } 

3.在你的代碼,你可以通過編程設置樣式時沒有行:

cellTable.addStyleName(GlobalResources.RESOURCE.styles().hiddenHeader()); 

,並刪除風格調用此:

cellTable.removeStyleName(GlobalResources.RESOURCE.styles().hiddenHeader()); 

完成!