动态更新GWT Composite小部件的内容

时间:2011-06-17 12:30:25

标签: gwt widget composite gxt

我创建了一个小部件,它是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,就像最初一样,但它仍然是空的(即没有正文内容)。

我错过了什么?

谢谢!

1 个答案:

答案 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的布局。