【问题标题】:How do I add back elements with GWT after removing them with DOM.removeChild()?使用 DOM.removeChild() 删除元素后,如何使用 GWT 添加回元素?
【发布时间】:2013-07-05 21:55:26
【问题描述】:

我正在为应用程序使用 GWT 2.5。我有一些带有特别命名的 div 的静态 HTML,我正在使用 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 语句中得到上面提到的错误。所以我不知道我是否使用了错误的方法,或者什么。任何建议将不胜感激。

【问题讨论】:

    标签: dom gwt static element


    【解决方案1】:

    好的,我想我需要停止回答自己的问题了。在这一点上,看起来我什至尝试都大错特错。这一切都在开发模式下工作,但不是生产模式,所以我不得不完全重新考虑如何做我想做的事。两个主要问题(事实证明)是使用 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。

    【讨论】:

      猜你喜欢
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      相关资源
      最近更新 更多