parentNode () возвращает ноль при удалении нескольких дочерних узлов - PullRequest
0 голосов
/ 01 марта 2012

Я не могу найти решение, почему мой менеджер Explorer (BeanTreeView или OutlineView) в приложении NetBeans Platform 7.1 прекрасно работает с древовидной структурой, при удалении одного узла, но не при удалении нескольких узлов .Проблема связана с обновлением дерева, а не с удалением .При вызове действия удаления (системного действия) он вызывает метод 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.Я выбираю их все, вызываю действие удаления, и он вызывает метод destroy () узла 1.1, где он удаляет данные для него и вызывает мой метод reloadChildren () для parentNode узла 1.1 (как показано вкод выше).Затем после удаления узла 1.2 доходит до 1.3. Удаляет удаляемые данные для 1.3, но теперь getParentNode () возвращает ноль, хотя он снова должен возвращать Node 1 .

Аналогичная проблема возникает при удалении Node 1 и Node 2.вместе (или любые другие верхние узлы), даже если они являются потомками специального узла RootNode.Единственная разница в корне состоит в том, что там все идет нормально только для первого узла, но, чем любой другой выбранный, не может найти своего родителя.

Где может быть проблема?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Я думаю, что ваши элементы еще не были прикреплены к дереву dom. Сначала вы должны прикрепить их, например: document.body.appendChild (myElement); Затем вы можете удалить их в IE следующим образом: myElement.parentNode.removeChild (myElement);

0 голосов
/ 03 марта 2012

Лучшее решение этой проблемы - просто не вызывать 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();
}
...