0

GWT CellList ウィジェットを使用して Cell 要素をレンダリングします。

レンダリングが完了した後に何かを実行するために、レンダリング完了またはレンダリング完了イベントを登録する方法はありますか?

4

2 に答える 2

1

同じ質問があり、コードを調べて解決策を見つけました。

HasDataPresenterは、セルをビューにレンダリングするコードがあります (メソッドresolvePendingState(JsArrayInteger modifiedRows):

if (redrawRequired) {
        // Redraw the entire content.
        SafeHtmlBuilder sb = new SafeHtmlBuilder();
        view.replaceAllChildren(newState.rowData, selectionModel, newState.keyboardStealFocus);
        view.resetFocus();
      } else if (range0 != null) {
        // Surgically replace specific rows.

        // Replace range0.
        {
          int absStart = range0.getStart();
          int relStart = absStart - pageStart;
          SafeHtmlBuilder sb = new SafeHtmlBuilder();
          List<T> replaceValues = newState.rowData.subList(relStart, relStart + range0.getLength());
          view.replaceChildren(replaceValues, relStart, selectionModel, newState.keyboardStealFocus);
        }

        // Replace range1 if it exists.
        if (range1 != null) {
          int absStart = range1.getStart();
          int relStart = absStart - pageStart;
          SafeHtmlBuilder sb = new SafeHtmlBuilder();
          List<T> replaceValues = newState.rowData.subList(relStart, relStart + range1.getLength());
          view.replaceChildren(replaceValues, relStart, selectionModel, newState.keyboardStealFocus);
        }

        view.resetFocus();

メソッド view.replaceAllChildren(....) はレンダー セルの render メソッドを呼び出し、終了すると ValueChangeEvent() が発生します。

@Override
public void replaceAllChildren(....) {
  SafeHtml html = renderRowValues(...);

  ....

  fireValueChangeEvent();
}

したがって、あなたの cellList では、次のようにする必要があります。

   cellList.addHandler(new ValueChangeHandler<List<IPost>>() {

        @Override
        public void onValueChange(ValueChangeEvent<List<IPost>> event) {
          //Do something
          //Be careful because this handler could be called from other methods

        }
      }, ValueChangeEvent.getType());
于 2014-04-24T13:42:14.600 に答える