私は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() 関数です。コードの他の場所で正常に呼び出しているため、正しく動作することがわかっています。最初の行は列ヘッダーを非表示にし、2 行目はそれぞれの列の行を処理します。
private native void hideCols()/*-{
$wnd.jQuery("span.toHide").parent().hide();
$wnd.jQuery(".toHide").hide();
}-*/;
どんな助けでも大歓迎です。