GWT Tree Widget getElement() 方法未按预期工作

GWT Tree Widget getElement() method not working as expected

我有一个使用 Elements 创建的 GWT UI 面板,我需要向 UI

添加一个 GWT 树

我做到了

TreeItem department = new TreeItem("Packages");

      TreeItem salesDepartment = new TreeItem("Package1");
      TreeItem marketingDepartment = new TreeItem("Package2");
      TreeItem manufacturingDepartment = new TreeItem("Package3");

      TreeItem employee1 = new TreeItem("Flight");
      TreeItem employee2 = new TreeItem("Cruilse");
      TreeItem employee3 = new TreeItem("Flight");

      salesDepartment.addItem(employee1);
      salesDepartment.addItem(employee2);
      salesDepartment.addItem(employee3);

      TreeItem employee4 = new TreeItem("Cruise");
      TreeItem employee5 = new TreeItem("Hotel");      


      marketingDepartment.addItem(employee4);
      marketingDepartment.addItem(employee5);       

      TreeItem employee6 = new TreeItem("Cruise");
      TreeItem employee7 = new TreeItem("Hotel");

      manufacturingDepartment.addItem(employee6);
      manufacturingDepartment.addItem(employee7);

      department.addItem(salesDepartment);
      department.addItem(marketingDepartment);
      department.addItem(manufacturingDepartment);


      Tree tree = new Tree();
      tree.addItem(department);

      // consider that treeDiv is already added
      private Element treeDiv = DOM.createDiv();
      DOM.appendChild( treeDiv , tree.getElement() );

当我将树小部件添加为元素时,它仅显示文本输入而没有展开按钮或任何其他内容,它不能像树一样工作,只有文本。 请告诉我是否有解决办法。

  // consider that treeDiv is already added
  private Element treeDiv = DOM.createDiv();
  DOM.appendChild( treeDiv , tree.getElement() );

when I added the tree widget as a Element it shows only text inputs no expand buttons or anything,its not working as a tree just texts. please tell me is there any fix for this.

我不确定该评论是什么意思,因为树刚刚创建所以不能添加 已经,但即使这是一个问题,我'我不确定为什么我们必须直接使用树的元素。如果您跳过此问题还有更多内容,请添加它们。例如:treeDiv 曾添加到什么?


作为对问题的直接回答,不要这样做。而是使用 widget 自己的 add 方法,将 widget 添加到其他 widget,而不是直接操作 dom 元素。

例如,如果您直接将树添加到 <body>,这将如下所示:

RootPanel.get().add(tree);

或者,如果您已经有一个父窗口小部件(此处称为 panel),只需将其直接添加到该父窗口小部件即可:

panel.add(tree);

这是因为 Widget 连接有它自己的需要设置的事件连接 - 为了避免在更糟糕的浏览器中发生内存泄漏,重要的是要确保在 widget 被删除时删除事件连接从页面上取下。更多细节见http://www.gwtproject.org/articles/dom_events_memory_leaks_and_you.html,但简短的版本是在实际添加一个小部件的dom元素到更大的dom之后,必须调用小部件的onAttach,并且任何子小部件也必须有他们的 onAttach 也调用了。这是在将一个小部件添加到另一个小部件时自动完成的 - 你应该坚持 API.