我创建了一个小部件,它是Composite的子类,其中包含com.extjs.gxt.ui.client.widget.Viewport
。在这个视口中,我添加了我的标题组件,LayoutComponent(最初为空)和我的页脚组件。我通过在构造函数的末尾调用initWidget来初始化复合小部件,这些构造函数设置了所有内容......就像这样(删除了一些代码以便于阅读):
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:
MyComposite myComposite = new MyComposite(...);
RootPanel.get("myComposite").add(myComposite);
猜猜是什么......有效!我看到了。标题显示,页脚显示,此时内容为空白。好。然后我打电话来显示并添加内容。不完全如下,但例如:
myComposite.show(new Label(...));
但没有任何反应。代码确实运行,add(...)方法从show(...)方法调用,没有异常,但没有(new)显示。我不使用Label,但这不是问题(已验证,在其他地方有效)。当我在浏览器中检查DOM时,我发现内容有一个div,就像最初一样,但它仍然是空的(即没有正文内容)。
我错过了什么?
谢谢!
答案 0 :(得分:4)
首先,你是在扩展GWT Composite还是GXT Composite?如果是GXT类型,则需要在视口(而不是initWidget)上调用initComponent(),如下所述:http://dev.sencha.com/deploy/gxtdocs/com/extjs/gxt/ui/client/widget/Composite.html
另外,尝试在show方法的末尾添加以下行: content.layout(真);
这会强制GXT布局LayoutContainer的内容,至少应该看到添加到DOM的新元素。如果它们仍然没有出现在屏幕上,则需要更改LayoutContainer的布局。