java如何在GWT中清除根面板?
我不熟悉Java和GWT。
据我所知,GWT的概念不是在页面之间导航
而是使用相同的RootPanel
并更改其中的内容。
我的问题是,如果我在RootPanel
中添加了一些小部件,并且将它们与浏览器元素关联,那么该如何做。
例如:
RootPanel.get("sendButtonContainer").add(sendButton);
RootPanel.get().clear();
在此代码之后,sendbutton
仍然出现在RootPanel
上
我们将不胜感激
# 1 楼答案
试着这样做:
# 2 楼答案
这里的问题是根面板。get()。clear()只能删除通过GWT添加到其中的小部件。您的“sendButtonContainer”不是通过GWT添加的,而是从html页面添加的。
sendButton
也没有添加到根面板,因此也没有删除它如果只想删除发送按钮,可以调用
RootPanel.get("sendButtonContainer").clear()
如果你想清除整个根面板,包括sendButtonContainer,你必须明确地将sendButtonContainer(以及其他所有内容)作为一个小部件添加到根面板中。有些方法可用于使用小部件包装html主机页上的元素
如果可能的话,如果您完全从GWT中构建整个页面,并将宿主html页面保留为空白,那么这一切都会容易得多。UiBinder使继续使用HTML变得相对简单,但要在GWT的框架内使用
# 3 楼答案
您应该尝试清洁您将小部件连接到的容器:
# 4 楼答案
# 5 楼答案
上面的一些答案已经解决了您的问题,但我想您之所以会遇到这个问题,首先是因为您混淆了GWT小部件和HTML元素。如果你做得不对,这会让你头疼
问题的关键在于,你的网站总是由HTML元素组成,你可以通过修改你的主页来编辑这些元素。html页面,创建GWT小部件并将其添加到其他小部件或面板,手动编写现有元素的innerHTML等。CSS也将按预期应用于这些元素
那么GWT小部件呢?它们基本上是包装底层元素的代码单元,可以创建底层元素,也可以包装现有元素。这些包装器在比普通元素更高的级别上工作,比如说在逻辑级别上。因此,它们有自己的逻辑层次结构,可能不同于HTML层次结构
例如,假设您将标签添加到水平面板。从逻辑上讲,标签是面板的子级,如果调用clear,它将被删除。现在,如果你深入研究DOM结构,你会发现一个<;表>;具有<;tr>;元素,该元素又有一个<;td>;元素,该元素又有一个<;部门>;元素(由标签包装),该元素又包含标签文本。看看层次结构有什么不同
所以,回到你的实际问题:根面板。get()。清除();将删除GWT小部件层次结构中的任何逻辑子项,在您的情况下不会删除任何内容,因为您已将按钮添加到另一个面板(“sendButtonContainer”)。在HTML层次结构中,sendButtonContainer可能是主RootPanel的子元素,这一事实是无关的和独立的。当然,你可以通过RootPanel来消除别人所说的一切。get()。getElement()。setInnerHTML(“”);它在dom级别工作。你的小部件可能仍然存在并且可以访问,但它们不会出现在文档中
# 6 楼答案
我知道这个问题很古老,但也许这就是你想要的答案:
这将删除根面板中的所有内容,或
get()
函数中通过id指定的任何其他div:在要清除的根面板中,必须首先在添加了小部件的任何其他根面板上调用GWT
clear()
。否则,这些小部件将在下一步成为孤立的,您将遇到异常然后,第三行从根面板中删除任何HTML。这包括您的GWT应用程序所基于的网页中包含的任何HTML,以及GWT添加的任何HTML,如果您正确执行了第一步,那么现在就不应该剩下任何HTML,否则,您将遇到前面提到的问题
希望这有帮助
顺便说一句:使用GWT的好选择!;)