2

重要:: この問題は、スタック オーバーフローの同様のタイトルの問題とはまったく異なります。

GWT 2.5.1 の RPC でサポートされている AsyncDataProvider と連携して、CellTable が美しく動作しています。RPC の応答は非常に高速で、応答時間は 20 ミリ秒未満です。

私が抱えている問題は、テーブルのページをめくると、ブラウザ内のテーブルでちらつきが発生するように見えることです。デバッグ後、テーブルにデータ行が表示されず、数ミリ秒以内に次のページの行が復元されることがわかります。

これは、ページを移動するたびに、次の UI イベントのクイック シーケンスとして現れます (10 は任意のページ サイズです)。

  1. 現在のページを表示しています (10 レコード)
  2. 空のページを表示しています (0 レコード)
  3. 次のページを表示中 (10 件)

関連するページャー ウィジェットのイベント ハンドラーに問題があるかどうかを特定するために、テーブル内のページを手動で変更するためのボタンを (純粋にテスト目的で) 追加しました。次のボタンは、ページャー ウィジェットのクリックによるページングとまったく同じ症状を示します。

    _movePageForwardButton.addClickHandler(new ClickHandler() {
       @Override
       public void onClick(ClickEvent event) {
           _table.setPageStart(_table.getPageStart()+10);
       }
    });

私はすでに Google 検索を実行しており、現在経験しているのとまったく同じ症状を説明しているこの投稿(この質問のタイトルを借用したもの) を見つけました。解決策は提供されません。他の人が同じ問題を経験し、独自の回避策を講じたと想定する必要があります。回避策は非常にありがたいものです。

4

1 に答える 1

3

私も同じ問題を抱えていました。解決策は、非同期処理が開始される前に、rowData をすぐに (いくつかの一時的な値に) 設定することでした。

dataProvider = new AsyncDataProvider<StringEntity>() {

  @Override
  protected void onRangeChanged(final HasData<StringEntity> display) {
    final Range visibleRange = display.getVisibleRange();
    final int start = visibleRange.getStart();
    final int length = visibleRange.getLength();

    final List<StringEntity> subList = new ArrayList<StringEntity>();
    for (long position = start; position < start + length; position ++)
      subList.add(new StringEntity(position, "Please wait..."));

    display.setRowData(start, subList);

    // now perform your request...
    // onSuccess, set the rowData again (to the updated values)
  }
}
于 2014-01-04T22:11:51.063 に答える