我使用GWT CellList小部件来渲染Cell元素。
有没有办法在渲染完成后注册渲染完成或渲染完成事件来执行?
答案 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)
您可以使用自己的自定义Cell扩展AbstractCell(在示例中使用的ContactCell)。
在那里你需要覆盖渲染方法:
@覆盖 public void render(Context context,ContactInfo value,SafeHtmlBuilder sb){
(//other codes)
(// put your logic after render here at the last)
}