0

我找不到解决方案,为什么我在 NetBeans Platform 7.1 应用程序中的资源管理器管理器(BeanTreeView 或 OutlineView)在删除单个节点时与树结构一起工作得很好,但在删除多个节点时却不行。问题在于刷新树,而不是删除本身。调用删除操作(系统操作)时,它会在我的节点上调用 destroy() 方法:

@Override
public void destroy() throws IOException {
  //removing the business object
  ...

    try {
      IReloadableViewCapability rvc;
      if (getParentNode() != null) {
        rvc = this.getParentNode().getLookup().lookup(IReloadableViewCapability.class);
      }
      rvc.reloadChildren();
    } catch (Exception ex) {
      logger.log(Level.WARNING, null, ex);
    }

    fireNodeDestroyed();
}

比方说,我有这个结构:

  • 节点 1
    • 1.1
    • 1.2
    • 1.3
  • 节点 2
    • 2.1
    • ...

现在假设我要删除节点 1.1、1.2 和 1.3。我将它们全部选中,调用删除操作并调用节点 1.1 的 destroy() 方法,在该方法中删除数据并在节点 1.1 的 parentNode 上调用我的 reloadChildren() 方法(如上面的代码所示)。然后删除节点1.2后,就到了1.3。它删除了 1.3 的删除数据,但现在 getParentNode() 返回 null,即使它再次应该返回 Node 1

当同时删除节点 1 和节点 2(或任何其他顶级节点)时,也会出现类似的问题,即使它们是特殊 RootNode 节点的子节点。root 的唯一区别是它只对第一个节点正常,但比任何其他选择的节点都找不到它的父节点。

问题可能出在哪里?

4

2 回答 2

0

这个问题的更好的解决方案是避免调用 parentNode,但是稍微改变一下我对 ChildFactory 的实现。我的 CHildFactory 现在也实现了 NodeListener 并且在 nodeDestroyed 覆盖的方法中它只调用:

refresh(true);

然后我将侦听器添加到创建的节点:

@Override
protected Node createNodeForKey(Chapters key) {
    ChapterNode chapterNode = new ChapterNode(key);

    chapterNode.addNodeListener(this);
    return chapterNode;
}

然后我修改了节点的 destroy() 方法:

@Override
public void destroy() throws IOException {
    //removing the business object
    ...

    fireNodeDestroyed();
}
于 2012-03-02T20:06:39.930 回答
0

我认为您的元素尚未附加到 dom 树。您必须先附加它们,例如: document.body.appendChild(myElement); 然后你可以像这样在 IE 中删除它们: myElement.parentNode.removeChild(myElement);

于 2018-10-19T08:22:47.670 回答