从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());


做完了!

10-06 06:44