2011-09-30 101 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()); 

完成!