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() 関数です。コードの他の場所で正常に呼び出しているため、正しく動作することがわかっています。最初の行は列ヘッダーを非表示にし、2 行目はそれぞれの列の行を処理します。

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場合)。

于 2012-06-05T22:14:11.030 に答える