2

ListDataProvider の並べ替えの例を参照として使用して、GWT の列を並べ替えようとしています。

http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting

問題は、テーブルの列データが (デバッガーを使用して) 並べ替えられていることを確認できますが、テーブルが更新されないことです。上記のリンクの例を見ると、表示が明示的に更新されていません。ここで何か不足していますか?

ありがとう。

4

2 に答える 2

7

私の経験では、並べ替えハンドラー (つまり、ListHandler) は、作成時に ListDataProvider が持つリストに敏感であると言われています。

そのため、ListDataProvider の新しいリストを削除または設定しないことをお勧めします (もちろん、作成時に少なくとも空の (null ではない) リストが必要だと思います)。

それを使用ListDataProvider.getList()して仕事をするだけです。

たとえば、現在の行をすべて削除して新しいデータを設定するには、呼び出しListDataProvider.getList().clear()てからListDataProvider.getList().addAll(yourNewData); 呼び出しないでください。そうしないとsetList()、並べ替えが機能しなくなります。

于 2012-02-26T17:50:35.540 に答える
3

これらの2つの例は、役に立たず、混乱を招きます。

ListHandlerとDataProviderの使用も、セル/グリッドテーブルの使用方法を説明するときにあまり役に立ちません。

例では、GWTセル/グリッドテーブルの1つの単純な特性をわかりにくくし、非表示にしています。データが変更されるたびに、リストを置き換えてテーブルにフィードするだけです。

例でのListHandler、Asyncハンドラー、およびDataProviderの使用は、ふわふわした役に立たない抽象的なエレガンスを大量に投入することにより、かなり単純なプロセスを複雑にします。基本的に、これらの抽象的で恐ろしい構造自体が、レコードをテーブルリストにプッシュおよびリプッシュします。タイマーの使用には注意を払わないでください。

その雄牛の角でテーブルリストを取り、それを自分で行うこともできます-その方法ははるかに簡単です。コードを持っていないので、どうやってやっているのか正確に思い出せません。

あなたがする必要があるのは、レコードのリストのバッファコピーを保持することです。これは、テーブルに表示されるレコードのリストです。

非同期を実行しているかどうかは関係ありません。必要なデータへの変更は、そのバッファーコピーで行われます。GWT-RPCはそのバッファーを更新する必要があります。

テーブルが昇順の並べ替えを要求すると、コンパレータ/フィルトレータは、setRowDataを使用してテーブル内のデータを置き換えるために、バッファリングされたリストの昇順のコピーを生成します。同様に、テーブルが降順または特殊なフィルタリングを要求した場合。

DataProviderを使用すると、ページングを管理できるようにする場合に便利です。GWT-RPCを自分で処理する方がはるかに簡単です。DataProviderは、テーブルの希望に従って並べ替え/フィルタリングされた新しいリストをサーバーに送信するようにサーバーに要求することで、並べ替えとフィルタリングを処理することになっています。10ページを超えるレコードがない限り、サーバーにフィルタリング/並べ替えを管理させることでネットワークトラフィックを消費したいのはなぜですか。

したがって、単純な50レコードの実験例では、バッファリストを自分で管理します。

于 2012-02-22T04:40:08.443 に答える