GWT CellList渲染完成处理程序?

时间:2014-01-01 15:22:46

标签: java javascript html gwt celllist

我使用GWT CellList小部件来渲染Cell元素。

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

2 个答案:

答案 0 :(得分: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(....)调用渲染单元格的渲染方法,并在完成后触发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());

答案 1 :(得分:0)

参考GWT CellList Widget Example

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

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

  

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

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