从GWT 2.3升级到2.4导致在扩展CellTable的类中发生客户端异常。并没有损失任何功能,但是例外是持续的开发烦恼。
com.google.gwt.core.client.JavaScriptException:(TypeError):this.insertBefore不是函数
我已经确定了导致此情况的行,尽管直到稍后渲染表格后才会引发异常。在行更改处理程序中,当CellTable中没有行时,MyCellTable会删除标头Element。这是一些导致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中是否有任何已知的更改可能导致此问题?谁能想到解决方法?
最佳答案
通过使用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());
做完了!