2011-09-06 46 views

回答

2

它可以很好地工作。您可以定義一個BaseForm類UiBinder的實現HasWidgets,然後用一些定義SpecificForm1.ui.xml像

<custom:BaseForm> 
    <g:TextBox ui:field="componentSpecificToThisForm" /> 
    <g:Button>A button!</g:button> 
</custom:BaseForm> 

和SpecificForm2.ui.xml喜歡的東西

<custom:BaseForm> 
    <g:Label>Something totally different</g:Label> 
    <g:Button>A button!</g:button> 
</custom:BaseForm> 

它的偉大工程!

+0

因此,如果我理解您的解決方案,在BaseForm類中,我可以將SpecificForm1.ui.xml中的textBox和SpecificForm2.ui.xml中的Label組合起來? – outellou

+0

當然 - 添加你喜歡的任何小部件。當你從'HasWidgets'實現'add(IsWidget)'時,你可以確定你會接受多少個小部件,以及如何處理它們。你也可以實現'HasOneWidget',只接受一個HTMLPanel或其他東西。 –

1

我試過類似的東西,建立一個窗體,我隱藏/顯示適當的字段是最簡單的解決方案。另一個想法是創建一個工廠,然後根據您的需求構建您的表單。因此,您基本上創建了您的表單所組成的組件,並且工廠通過構造函數依賴注入將它們連接在一起。對我來說工作得非常好,而且還有一個額外的好處,就是很容易擴展你的表單。

(我稍後會添加一個示例)。

+1

使用'HasWidgets'而不是構造函數增加了使用UiBinder文件配置特定版本的好處,如果您的設計者不知道Java,這將特別好! –