我无法找到解决方案,为什么NetBeans Platform 7.1应用程序中的Explorer Manager(BeanTreeView或OutlineView)在删除单个节点时可以正常使用树结构,但在删除多个节点时则不行。 问题在于刷新树,而不是删除本身。 在调用delete action(系统操作)时,它在我的Node上调用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.2和1.3。我全部选择它们,调用delete动作并调用节点1.1的 destroy()方法,删除它的数据并在节点1.1的parentNode上调用我的reloadChildren()方法(如图所示)在上面的代码中)。 然后在删除节点1.2后,它变为1.3。 删除1.3的删除数据,但现在getParentNode()返回null,即使它再次返回节点1 。
将节点1和节点2(或任何其他顶级节点)一起删除时会发生类似的问题,即使它们是特殊RootNode节点的子节点。 root中唯一的区别是,只有第一个节点才能正常运行,但是所选择的任何其他节点都无法找到它的父节点。
哪里可能是问题?
答案 0 :(得分:0)
解决这个问题的更好方法是避免调用parentNode,但改变我的ChildFactory实现。 我的CHildFactory现在也实现了NodeListener,并且在nodeDestroyed overriden方法中它只调用:
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();
}
答案 1 :(得分:0)
我认为您的元素尚未附加到dom树上。您必须先附加它们,例如:document.body.appendChild(myElement);然后,您可以像这样在IE中删除它们:myElement.parentNode.removeChild(myElement);