我正在使用GWT並且有一個按鈕,點擊後應過濾顯示在我的CellTable中的數據,然後隱藏一些列。在GWT中執行事件塊後的調用函數
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();
}-*/;
任何幫助將不勝感激。
感謝您的回覆。 我最初使用'refresh()',但列回來了。 flush()有什麼不同? 我試着向你提到的列添加樣式,但似乎沒有發生。我能夠從桌子上移除柱子,但如果我再次需要它們,則無法將它們還原。 我沒有嘗試使用'Scheduler.get()。scheduleDeferred'。 我現在最終做的是創建第二個表格,只顯示我想要隱藏的列,並根據需要切換其可見性。這不是一個很好的解決方案,但它的工作。 –
我對我的答案做了一些更正,併爲該方法添加了javadocs的鏈接。這說明我的意思是'CellTable#flush()'而不是'ListDataProvider#flush()',例如。太加入你的列,使用'insertColumn()';這應該會觸發重繪,但是您可以調用'CellTable'上的'redraw()'來確保。 –