gpt4 book ai didi

gwt - 将 GWT 单元树打开到特定节点

转载 作者:行者123 更新时间:2023-12-02 22:42:29 26 4
gpt4 key购买 nike

我有一个文件浏览器类型的应用程序,它由一个显示层次结构的 CellTree 和一个显示当前节点内容的浏览器 Pane 组成。

应用程序必须处理可能太大而 CellTree 无法有效处理的层次结构,因此浏览器 Pane 中显示的位置与树中的开放节点没有强耦合。

我希望实现一个按钮,该按钮将打开 CellTree 中的当前浏览位置。我的服务器端数据模型对所有对象都有父/子引用,因此获取层次结构是一件简单的事情,但我正在努力解决如何将其应用于树的问题。

这是我目前的尝试,它是包含我的树的小部件上的一个方法,从接收方调用。 RecordTreeLevel 对象各自代表树中的一个级别。

public void navigateTo(List<RecordTreeLevelProxy> hierarchy) {
TreeNode currentNode = tree.getRootTreeNode();

ListIterator iter = hierarchy.listIterator(hierarchy.size());

while (iter.hasPrevious()){
RecordTreeLevelProxy level = (RecordTreeLevelProxy) iter.previous();
Integer nodeIndex = locateNode(level.getUniqueRef(), currentNode);
if (nodeIndex != null){
currentNode = currentNode.setChildOpen(nodeIndex, true, true);
}
}
}

这是行不通的,因为在将子节点添加到任何节点之前,循环已经完成。因此,第一级节点按原样打开,但在第二次出现循环时没有任何子节点。

我忍不住觉得我遗漏了一些明显的东西,或者以错误的方式做这件事,但我看不到。非常感谢任何帮助(即使是说“别傻了,你不能那样做)

最佳答案

如果您从 TreeViewModel同步填充数据,您的代码应该可以工作(假设 locateNode 做了我认为它做的事情,即在 currentNode.getChildValue(i)i 之间用 0 迭代 currentNode.getChildCount())。

我在类似情况下所做的(我实际上是用 CellBrowser 做的)是我预加载缓存(我正在缓存各种树的分支)使用选定节点的层次结构,然后运行与您的代码非常相似的代码。 TreeViewModel如果值在缓存中则同步运行,否则异步运行(向服务器询问已打开节点的子节点)。

例如,对于下面的树:

- A
+- A1
+- A1a
+- A2
+- A2a
+- A2b
- B
+- B1
+- B2

如果应该预先选择 A2a 节点,我首先加载根分支,A分支,然后是 A2分支:

<root> -> [ A, B ]
A -> [ A1, A2 ]
A2 -> [ A2a, A2b ]

这样,我确定我的 TreeViewModel将为节点同步运行 <root> , AA2 .

然后只有我运行 setChildOpen代码。因为TreeViewModel对于这些节点是同步的,setChildOpen返回一个非空值。

关于gwt - 将 GWT 单元树打开到特定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com