【问题标题】:Open GWT cell tree to specific node将 GWT 单元树打开到特定节点
【发布时间】:2012-05-15 22:43:55
【问题描述】:

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

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

我希望实现一个按钮,该按钮将打开 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);
        }
    }
}

这不起作用,因为循环在子节点被添加到任何节点之前完成了整个循环。因此,第一级节点按应有的方式打开,但在第二次循环出现时没有任何子节点。

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

【问题讨论】:

    标签: gwt tree cell


    【解决方案1】:

    如果您从 TreeViewModel 同步填充数据,您的代码应该可以工作(前提是 locateNode 执行我认为的操作,即在 i 和 @987654325 之间迭代 currentNode.getChildValue(i) @ 和 currentNode.getChildCount())。

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

    例如,对于以下树:

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

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

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

    这样,我确信我的TreeViewModel 将在节点&lt;root&gt;AA2 上同步运行。

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

    【讨论】:

    • 感谢您的快速回复 Thomas,我认为这正是我需要做的。你如何让 TreeViewModel 同步运行缓存数据和异步运行?您使用的是自定义数据提供程序吗?
    • 您对 locateNode 功能的假设也是正确的,这正是它的作用。我可能应该首先解释一下。
    • 我现在可以通过修改数据提供程序上的 onRangeChange 方法来检查客户端缓存,然后再去服务器查找数据。再次非常感谢 Thomas 清晰简洁的描述,这对我很有帮助。
    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2012-04-05
    • 2012-10-30
    相关资源
    最近更新 更多