2011-06-17 65 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

相關問題