【发布时间】:2014-11-01 11:01:48
【问题描述】:
假设我的 ui.xml 文件中有一些带有 visible="false" 属性的组件,并且在我的 java 代码中我展示了其中的一些组件。有没有简单的方法/方法来恢复存储在 uiBinder 中的可见性限制,所以我得到了基本的组件配置?
【问题讨论】:
标签: java gwt visibility restore restrictions
假设我的 ui.xml 文件中有一些带有 visible="false" 属性的组件,并且在我的 java 代码中我展示了其中的一些组件。有没有简单的方法/方法来恢复存储在 uiBinder 中的可见性限制,所以我得到了基本的组件配置?
【问题讨论】:
标签: java gwt visibility restore restrictions
不,UiBinder 不能那样工作。 ui.xml 文件用于在编译时为您生成 Java 代码。所以你的visible="false" 可能会导致生成对UiObject.setVisible 的调用,等等。当你调用initWidget(uiBinder.createAndBindUi(this)); 时会运行此代码。如果您想将您的小部件“恢复”到 UiBinder 设置的初始状态,恐怕唯一简单的方法是再次实例化小部件 - 但我不推荐这样做,因为这通常是一项昂贵的操作。最好只编写一个将字段恢复到预定义状态的方法 - 您也可以使用此方法设置初始状态,而不是在 UiBinder 模板中定义它(并且在某种意义上复制)。我假设您可以在您的类中访问所有必要的字段(因为您在问题中提到通过 Java 代码更改它们的可见性),因此您不必添加一堆字段只是为了在它们上调用 setVisibile。
【讨论】:
您只需调用 setVisible(true) 到您想要拥有的小部件:
Fichier UiBinder
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<g:HTMLPanel>
Hello, <g:TextBox ui:field='textBox' visible='false'/>.
</g:HTMLPanel>
</ui:UiBinder>
Fichier Java
public class HelloWidgetWorld extends Composite {
interface MyUiBinder extends UiBinder<Widget, HelloWidgetWorld> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField TextBox textBox;
public HelloWidgetWorld() {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
}
public void restoreVisible() {
textBox.setVisible(true);
}
}
【讨论】: