2011-09-06 126 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,这将特别好! –