动态更新GWT复合小部件的内容

动态更新GWT复合小部件的内容,gwt,widget,composite,gxt,Gwt,Widget,Composite,Gxt,我创建了一个小部件,它是Composite的一个子类,其中有一个com.extjs.gxt.ui.client.widget.Viewport。在这个视口中,我添加了页眉组件、布局组件(最初为空)和页脚组件。我通过在设置所有内容的构造函数末尾调用initWidget来初始化复合小部件。。。类似这样的内容(为了可读性,删除了一些代码): 然后,我将其实例添加到根面板: MyComposite myComposite = new MyComposite(...); RootPanel.get("my

我创建了一个小部件,它是Composite的一个子类,其中有一个
com.extjs.gxt.ui.client.widget.Viewport
。在这个视口中,我添加了页眉组件、布局组件(最初为空)和页脚组件。我通过在设置所有内容的构造函数末尾调用initWidget来初始化复合小部件。。。类似这样的内容(为了可读性,删除了一些代码):

然后,我将其实例添加到根面板:

MyComposite myComposite = new MyComposite(...);
RootPanel.get("myComposite").add(myComposite);
猜猜看。。。真管用!我看到了。页眉显示,页脚显示,此时内容为空。好的然后我打电话来展示并添加内容。不完全如下所示,但例如:

myComposite.show(new Label(...));
但什么也没发生。代码确实在运行,add(…)方法从show(…)方法调用,没有异常,但没有显示任何(新的)。我不使用标签,但这不是问题所在(已验证,在其他地方有效)。当我在浏览器中检查DOM时,我看到内容有一个div,就像最初一样,但它仍然是空的(即没有正文内容)

我错过了什么


谢谢

首先,您是在扩展GWT复合还是GXT复合?如果是GXT类型,则需要在视口(而不是initWidget)上调用initComponent(),如下所述:

此外,请尝试将以下行添加到show方法的末尾: 内容、布局(真实)


这将迫使GXT对LayoutContainer的内容进行布局,您至少应该看到添加到DOM中的新元素。如果它们仍然没有出现在屏幕上,您需要更改LayoutContainer的布局。

首先,您是在扩展GWT Composite还是GXT Composite?如果是GXT类型,则需要在视口(而不是initWidget)上调用initComponent(),如下所述:

此外,请尝试将以下行添加到show方法的末尾: 内容、布局(真实)


这将迫使GXT对LayoutContainer的内容进行布局,您至少应该看到添加到DOM中的新元素。如果它们仍然没有出现在屏幕上,您需要更改LayoutContainer的布局。

我还应该注意,LayoutContainer是com.extjs.gxt.ui.client.widget.LayoutContainer,并且可以独立工作。我在stackoverflow.com上发现了一个类似的问题——有人扩展了一些面板组件,但什么也没有显示,于是建议扩展复合组件,并实际包含面板。虽然出于许多原因,这些都是重要的考虑因素,但我不明白为什么这会对这件事是否有效(显示)产生影响!我还应该注意到,LayoutContainer是com.extjs.gxt.ui.client.widget.LayoutContainer,它本身也可以工作。我在stackoverflow.com上发现了一个类似的问题——有人扩展了一些面板组件,但什么也没有显示,于是建议扩展复合组件,并实际包含面板。虽然出于许多原因,这些都是重要的考虑因素,但我不明白为什么这会对这件事是否有效(显示)产生影响!com.google.gwt.user.client.ui.Composite。现在将尝试content.layout(true),并会让您知道。com.google.gwt.user.client.ui.Composite。现在将尝试content.layout(true),并会让您知道。
myComposite.show(new Label(...));