好的,在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"));
}
答案 0 :(得分:1)
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。