以编程方式刷新Gwt CellTree

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)

Ümi*_*mit 2

1 级节点(我想你是根节点下方的平均值)无法按照你的方式刷新。

您必须将 1 级节点的 dataProvider 实例存储在某处。稍后,当您刷新列表时,您必须更新 1 级节点存储的 dataProvider。
1 级以下的节点可以按照您的方式进行刷新。因为一旦您关闭 1 级节点(这就是您在 updateTree 方法中所做的事情),下次打开它时 getNodeInfo 将被调用,更新的子类别将被检索并显示在 CellTree 中。

更新

要刷新附加到 AsyncDataProvider 的 CellWidgets,您可能必须扩展 AsyncDataProvider 并将 RPC 调用提取到在 onRangeChanged() 方法中调用的getData()方法,或者创建一个带有刷新方法的接口并在您的自定义 AsyncDataProvider 调用受保护的 onRangeChanged() 方法。