1

我正在使用 GWT 并有一个按钮,单击该按钮应过滤 CellTable 中显示的数据,然后隐藏一些列。

filterButton.addClickHandler(new ClickHandler() {
    public void onClick (ClickEvent event) {
        //some working code here to get the minimum and maximum
        filter(min, max);
        hideCols();
    }
});

我的问题就在这里。我发现(来自https://developers.google.com/web-toolkit/doc/latest/DevGuideUiCellWidgets#celllist) ListDataProvider 将 Celltable 绑定到我的列表,并且对列表的任何更改都将反映在视图中。视图在当前事件块的末尾更新,这导致了我的问题。我在当前事件块中调用 hideCols() 并隐藏列,但据我所知,视图在退出块时更新,并且重新绘制列。ListDataProvider 完全完成后,有什么方法可以让 hideCols() 运行?

filter(int min, int max) {
    for (SiteInfo site : displayedList)
        if (site.num_zones >= min && site.num_zones <= max)
            filteredList.add(site);
    dataProvider.getList().clear();
    dataProvider.getList().addAll(filteredList);
    siteTable.setRowCount(filteredList.size());
}

最后是 hideCols() 函数。我知道它可以正常工作,因为我在代码的其他地方成功地调用了它。第一行隐藏列标题,第二行负责相应列的行。

private native void hideCols()/*-{
    $wnd.jQuery("span.toHide").parent().hide();
    $wnd.jQuery(".toHide").hide();
}-*/;

任何帮助将非常感激。

4

1 回答 1

1

您可以使用 同步重绘flush()

但是 IMO 你应该修复你的hideCols: 用于addColumnStyleName添加一个类,visibility: collapse或者.CellTable

为了回答你的问题,你可以使用Scheduler.get().scheduleFinally(或者scheduleDeferred如果finally还不够晚)。

于 2012-06-05T22:14:11.030 回答