GWT方法setVisible和removeFromParent

时间:2012-06-14 07:27:54

标签: gwt

UIObject#setVisible(false)在功能上与Widget#removeFromParent不同吗?

此外,DialogBox#hide只是对UIObject#setVisible(false)的一次短暂调用吗?

任何实际例子?

2 个答案:

答案 0 :(得分:2)

UIObject#setVisible在元素上设置CSS'display'属性。如果您有一个HTMLPanel并且在其上调用setVisible(false),则会产生此

  

< div style =“display:none”>我的HTML面板!< / DIV>

而removeFromParent将从您网页的DOM中删除该元素。同样,如果您的页面正文附有HTMLPanel并在其上调用了removeFromParent(),那么您将从

开始
< body>
    <div >My HTML Panel !</div>
</body>

< body> < /body>

因此,一旦您从其父级删除了一个小部件,如果您想再次显示它,则必须重新附加它。

至于你的第二个问题,我没有查看DialogBox#hide的代码,但我会说它可能会在某些时候调用setVisible(false)等等。

答案 1 :(得分:0)

我发现了setVisible()方法在隐藏嵌套演示者时的有用应用。如果要从其中一个页面中删除嵌套的演示者,可以在onReset()方法中执行以下操作:

    if(mainPagePresenter.isVisible()){getView().getMenuBar().setVisible(false);}
    else{getView().getMenuBar().setVisible(true);}        

这样,您只需在所需页面上隐藏嵌套的演示者或任何其他演示者或窗口小部件。您可以使用removeFromParent()方法执行此操作,但是对于用户导航事件,您的对象将不会重新插入,因为您删除了页面的对象表单DOM。如果用户重新加载页面,最终将通过调用onReveal()方法插入它。因此,如果您只想“隐藏”某些面板,则setVisible()是可行的方法,否则如果您想永久删除对象,则可以选择removeFromParent()。