2011-06-17 66 views
1

我创建了一个窗口小部件,它是Composite的一个子类,并且其中包含一个com.extjs.gxt.ui.client.widget.Viewport。在这个视口中,我添加了我的头部组件,一个LayoutComponent(最初为空)和我的页脚组件。动态更新GWT复合窗口小部件的内容

public class MyComposite extends Composite { 
    ... 

    public MyComposite(...) { 
     viewport = new Viewport(); 
     viewport.add(new Header()); 

     content = new LayoutContainer(); 
     viewport.add(content); 

     viewport.add(new Footer()); 

     initWidget(viewport); 
    } 

    public void show(Widget... widgets) { 
     content.removeAll(); 
     for (Widget widget: widgets) content.add(widget); 
    } 
} 

然后,我添加了这样的一个实例的RootPanel:我通过在构造函数的末尾,设置了一切......这样的事情(有些代码的可读性删除)调用initWidget初始化的组合构件:

MyComposite myComposite = new MyComposite(...); 
RootPanel.get("myComposite").add(myComposite); 

并猜测什么......那么工作!我看到了。标题显示,页脚显示,此时内容为空。好。然后我打电话来显示并添加内容。不完全如下,但例如:

myComposite.show(new Label(...)); 

但没有任何反应。代码确实运行,add(...)方法从show(...)方法调用,没有例外,但没有任何(新)出现。我不使用标签,但这不是问题(经过验证,适用于其他地方)。当我在浏览器中检查DOM时,发现内容中有一个div,就像最初一样,但它仍然是空的(即没有内容)。

我错过了什么?

谢谢!

+0

我还应该注意到LayoutContainer是com.extjs.gxt.ui.client.widget.LayoutContainer,并且它自己也可以工作。我在stackoverflow.com上发现了一个类似的问题 - 某人扩展了一些面板组件,根本没有任何东西出现,并被建议扩展Composite而实际上包含面板。虽然这些都是很重要的考虑因素,但我不明白为什么这件事会影响到这件事是否有效(显示)! – Learner 2011-06-17 12:47:40

回答

4

首先,您是否在扩展GWT Composite或GXT Composite?如果是GXT型则需要视口(而不是initWidget)调用initComponent()如下所述:http://dev.sencha.com/deploy/gxtdocs/com/extjs/gxt/ui/client/widget/Composite.html

此外,尝试添加以下行到你的表演方法的末尾: content.layout (真正);

这将强制GXT放置LayoutContainer的内容,并且至少应该看到添加到DOM的新元素。如果他们仍然没有出现在屏幕上,您需要更改LayoutContainer的布局。

+0

com.google.gwt.user.client.ui.Composite。现在尝试content.layout(true)并且会让你知道。 – Learner 2011-06-17 13:27:11

相关问题