从GWT 2.3升级到2.4导致了我的一类客户端异常,它扩展了CellTable。没有功能损失,但例外是持续的发展烦恼。
com.google.gwt.core.client.JavaScriptException:(TypeError):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中是否有任何可能导致此问题的已知更改?有人能想到一个解决方法吗?
答案 0 :(得分:2)
您可以使用CSS属性获得相同的结果(隐藏标题):在celltable的“thead”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());
完成!