使用DOM.removeChild()删除元素后,如何使用GWT添加元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用DOM.removeChild()删除元素后,如何使用GWT添加元素?相关的知识,希望对你有一定的参考价值。

我正在使用GWT 2.5进行应用程序。我有一些静态html和一个特别命名的div,我使用HTMLPanel.wrap()用GWT登录面板替换该div。一旦用户登录,我使用DOM.removeChild()从页面中删除所有静态元素,只使用GWT小部件。一切都很好。静态HTML看起来像:

<body><div id="main_content"><div id="embed_content"></div></div></body>

但是,在注销后,我想替换我之前删除的所有静态元素,并再次使用登录面板替换特殊div,使其看起来与第一次登录时相同。我尝试了很多不同的方法这个,但它们通常会失败并出现错误:

“具有现有父窗口小部件的窗口小部件可能不会添加到分离列表”

当我尝试再次包装div时我的包装div的代码是:

  RootPanel rpe = RootPanel.get("embed_content");
  rpe.clear();
  Element child;
  while((child = DOM.getFirstChild(rpe.getElement())) != null) {
   DOM.removeChild(rpe.getElement(), child);
  }
  HTMLPanel.wrap(rpe.getElement()).add(this);

“this”是一个HTMLPanel。删除元素的代码是:

  RootPanel rpm = RootPanel.get("main_content");
  rpm.clear();
  Element child;
  while((child = DOM.getFirstChild(rpm.getElement())) != null) {
   DOM.removeChild(rpm.getElement(), child);
  }
  HTMLPanel.wrap(rpm.getElement()).add(this);

我得到的最接近的是将元素保存在数组中,然后当我想再次显示静态内容时,我使用DOM.appendChild()将它们添加回去。那时“embed_content”元素存在,除了我在HTMLPanel.wrap语句中得到上面提到的错误之外,一切都很愉快。所以我不知道我是否使用了错误的方法,或者是什么。任何建议将不胜感激。

答案

好吧,我想我需要停止回答我自己的问题。在这一点上,看起来我甚至尝试它都是非常错误的。这一切都在开发模式,但不是生产模式,所以我不得不重新思考如何做我想要的。事实证明,两个主要问题是使用RootPanel.get()。add()并操纵静态HTML。长话短说,这里是我最终选择的最初“请等待”屏幕的示例:

Element child;
RootPanel rpm = RootPanel.get("main_content");
String html = rpm.getElement().getInnerHTML();
rpm.clear();
while((child = DOM.getFirstChild(rpm.getElement())) != null) {
  DOM.removeChild(rpm.getElement(), child);
}

HTMLPanel panel = new HTMLPanel(html);
String msg = "<h2>Please Wait</h2><p>Please wait a moment for " +
  "the application to load.</p>";
panel.addAndReplaceElement(new HTML(msg), "embed_content");
this.add(panel);
this.setWidth("100%");
RootLayoutPanel.get().add(new ScrollPanel(this));

所以在其他情况下,我需要读取服务器上的文件,并通过RPC发送HTML。

以上是关于使用DOM.removeChild()删除元素后,如何使用GWT添加元素?的主要内容,如果未能解决你的问题,请参考以下文章

删除后使用jQuery重新排序附加的元素编号

c#在遍历列表时删除元素-向后迭代或使用i--或使用linq同时迭代和删除?

删除元素后如何返回数组?

使用“克隆”助手执行可拖动事件后,如何删除原始元素?

从数据库中删除后,Vue.js $remove 不删除元素

如何在动画完成后删除元素?