我有约6种形式用UIBinder设计,看起来差不多,差别是两三个字段。我正在考虑建立一个包含所有可能字段的表单,并根据具体情况隐藏或显示字段。如何用几乎相似的外观设计几种形式?
您对这种方法有什么看法?
我有约6种形式用UIBinder设计,看起来差不多,差别是两三个字段。我正在考虑建立一个包含所有可能字段的表单,并根据具体情况隐藏或显示字段。如何用几乎相似的外观设计几种形式?
您对这种方法有什么看法?
它可以很好地工作。您可以定义一个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>
它的伟大工程!
我试过类似的东西,建立一个窗体,我隐藏/显示适当的字段是最简单的解决方案。另一个想法是创建一个工厂,然后根据您的需求构建您的表单。因此,您基本上创建了您的表单所组成的组件,并且工厂通过构造函数依赖注入将它们连接在一起。对我来说工作得非常好,而且还有一个额外的好处,就是很容易扩展你的表单。
(我稍后会添加一个示例)。
使用'HasWidgets'而不是构造函数增加了使用UiBinder文件配置特定版本的好处,如果您的设计者不知道Java,这将特别好! –
因此,如果我理解您的解决方案,在BaseForm类中,我可以将SpecificForm1.ui.xml中的textBox和SpecificForm2.ui.xml中的Label组合起来? – outellou
当然 - 添加你喜欢的任何小部件。当你从'HasWidgets'实现'add(IsWidget)'时,你可以确定你会接受多少个小部件,以及如何处理它们。你也可以实现'HasOneWidget',只接受一个HTMLPanel或其他东西。 –