Fab*_* B. 6 tree gwt refresh cell gwt-rpc
我想在我当前工作的CellTree上触发"打开根节点"事件,该事件现在具有以下行为:
@Override
public <T> NodeInfo<?> getNodeInfo(final T value) {
return new DefaultNodeInfo<Categoria>(
(value instanceof Categoria) ?
createBranchDataProvider((Categoria)value) :
rootDataProvider,
new CategoriaCell()
);
}
private AsyncDataProvider<Categoria> createRootDataProvider() {
AsyncDataProvider<Categoria> dataProvider = new AsyncDataProvider<Categoria>() {
@Override
protected void onRangeChanged(HasData<Categoria> display) {
AsyncCallback<Categoria[]> cb = new AsyncCallback<Categoria[]>() {
@Override
public void onSuccess(Categoria[] result) {
updateRowCount(result.length, true);
updateRowData(0, Arrays.asList(result));
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.toString());
}
};
rpcService.getCategorie(cb);
}
};
return dataProvider;
}
Run Code Online (Sandbox Code Playgroud)
如何触发"onRangeChanged"事件,刷新我的1级节点?
我的便利方法缺失了什么?
private void updateTree() {
TreeNode rootTreeNode = cellTree.getRootTreeNode();
for (int i = 0; i < rootTreeNode.getChildCount(); i++) {
rootTreeNode.setChildOpen(i, false);
}
// HOW TO REFRESH LEVEL-1 NODES?
}
Run Code Online (Sandbox Code Playgroud)
1 级节点(我想你是根节点下方的平均值)无法按照你的方式刷新。
您必须将 1 级节点的 dataProvider 实例存储在某处。稍后,当您刷新列表时,您必须更新 1 级节点存储的 dataProvider。
1 级以下的节点可以按照您的方式进行刷新。因为一旦您关闭 1 级节点(这就是您在 updateTree 方法中所做的事情),下次打开它时 getNodeInfo 将被调用,更新的子类别将被检索并显示在 CellTree 中。
更新
要刷新附加到 AsyncDataProvider 的 CellWidgets,您可能必须扩展 AsyncDataProvider 并将 RPC 调用提取到在 onRangeChanged() 方法中调用的getData()方法,或者创建一个带有刷新方法的接口并在您的自定义 AsyncDataProvider 调用受保护的 onRangeChanged() 方法。