"loading" 元素从 Parent 中删除后如何添加回来?

How to add back the "loading" Element after removed it from Parent?

好的,在war/MyProject.html,我有:

<body>
   <div id="loading">   
        <div id="waitingForLoading"></div>
            <BR/>
        <img src="../images/loading.gif" />

  </div>
...
</body>

MyProject.java

public class OfflineMatching implements EntryPoint {
   @Override
   public void onModuleLoad() {
        // this code works fine
        if(DOM.getElementById("loading")!=null){

            DOM.getElementById("loading").removeFromParent();
        }


        Button myButton=new Button("Enter Main Page");
        RootPanel.get().add(myButton);
        myButton.addClickHandler(new ClickHandler(){

           @Override
           public void onClick(ClickEvent event) {
               // this code does not work
               if(DOM.getElementById("loading")==null){
                 DOM.appendChild(RootPanel.getBodyElement(), DOM.createElement("loading"));
               }
           }
        });
   }
}

所以,我做错了什么吗? 为什么此代码不起作用?

 // this code does not work
           if(DOM.getElementById("loading")==null){
             DOM.appendChild(RootPanel.getBodyElement(), DOM.createElement("loading"));
           }

DOM.createElement(String tagName) 创建一个 <tagname> 元素。因此,如果您将 "loading" 传递给它,它将创建一个 <loading> 元素。

为了快速解决问题,您可以使用 RootPanel.get,然后在小部件上调用 setVisible

// onModuleLoad:
RootPanel.get("loading").setVisible(false);

// onClick:
RootPanel.get("loading").setVisible(true);

但更好的方法是在 GWT 中将加载 <div> 创建为小部件,然后仅在其实例上调用 setVisible,而不依赖于 ID。