GWT CellList 渲染完成处理程序



我使用 GWT CellList widget 来渲染 Cell 元素。

有没有办法注册渲染完成或渲染完成事件以在渲染完成后执行内容?

我有同样的问题,并查看代码,我找到了可能的解决方案。

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(....)调用渲染单元的渲染方法,当它完成时,将触发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());

引用 GWT 单元格列表小部件示例

您可以使用自己的自定义 Cell 扩展 AbstractCell(如示例中使用的 ContactCell)。

在那里,您需要覆盖渲染方法:

@Override public void render(Context context, ContactInfo value, SafeHtmlBuilder sb) {

  (//other codes)
  (// put your logic after render here at the last)
}

最新更新