2010-06-24 82 views
8

我在Google Web Toolkit中使用涉及TabLayoutPanel的UIBinder進行佈局。此佈局具有將由我的應用程序使用的所有選項卡的超集(將其視爲管理員視圖)。是否可以重用GWT UIBinder面板?

我現在需要創建一個新的佈局,使用這些選項卡的子集(例如,對於普通用戶)。

是否可以在我的用戶佈局中從我的管理佈局導入面板?或者也許可以將它們全部定義在第三個文件中,並從兩個佈局導入?

回答

3

將每個標籤內容定義爲單獨的UiBinder模板。由於UiBinder類是複合材料,您可以將它們添加到任何容器,就像其他任何小部件一樣。

您可以在代碼中組裝TabLayoutPanel,方法是將每個UiBinder模板對象添加到TabPanel的選項卡中,或使用TabPanel和所有定義的選項卡定義另一個UiBinder模板。

如果您使用UiBinder路徑模板化TabLayoutPanel,通過定義一個指向所有組合所在程序包的新「名稱空間」,將標籤面板內容(您之前使用UiBinder定義的複合材料)導入到UiBinder中。然後,在UiBinder模板中將您的組合作爲名稱空間:ClassName引用。

如果com.project.package是您在其中保留所有您想要嵌入到單個選項卡中的組合,然後在xmlns:g聲明後不久定義新的名稱空間f爲xmlns:f= 'com.project.package'

你指個人在複合材料的UiBinder的作爲

<f:Composite1 /> 
<f:Composite2 /> 
+0

謝謝,這看起來很有希望。我會給它一個鏡頭。 – pkaeding

+0

這樣做的竅門;謝謝! – pkaeding

+0

很簡單,不是嗎? –

5

您肯定可以將您已撰寫的視圖(包括UIBinder模板和常規的Widget)導入到另一個UIBinder模板中。

UIBinder docs

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
    xmlns:g='urn:import:com.google.gwt.user.client.ui' 
    xmlns:my='urn:import:com.my.app.widgets' > 

    <g:HTMLPanel> 
    <my:WeatherReport ui:field='weather'/> 

    <my:Stocks ui:field='stocks'/> 
    <my:CricketScores ui:field='scores' /> 
    </g:HTMLPanel> 
</ui:UiBinder> 

通知的StocksCricketScores小部件是如何從自己的包導入。

您不一定只需要根據用戶權限顯示/隱藏選項卡,就可以根據訪問級別在GWT代碼中顯示/隱藏選項卡。

+0

凡定義股票?我想繼續用XML定義我的佈局,因爲我覺得這比在Java代碼中定義它們更容易管理。 – pkaeding

+0

根據上面的代碼,股票應該在com.my.app.widgets包中。 – markovuksanovic

+0

是的,我的問題更多的是「股票的UIBinder佈局在哪裏定義的?」不過,我認爲@Ashwin Prabhu的回答可能會回答這個問題。 – pkaeding