【问题标题】:GWT restore visibility restrictions from uiBinderGWT 从 uiBinder 恢复可见性限制
【发布时间】:2014-11-01 11:01:48
【问题描述】:

假设我的 ui.xml 文件中有一些带有 visible="false" 属性的组件,并且在我的 java 代码中我展示了其中的一些组件。有没有简单的方法/方法来恢复存储在 uiBinder 中的可见性限制,所以我得到了基本的组件配置?

【问题讨论】:

    标签: java gwt visibility restore restrictions


    【解决方案1】:

    不,UiBinder 不能那样工作。 ui.xml 文件用于在编译时为您生成 Java 代码。所以你的visible="false" 可能会导致生成对UiObject.setVisible 的调用,等等。当你调用initWidget(uiBinder.createAndBindUi(this)); 时会运行此代码。如果您想将您的小部件“恢复”到 UiBinder 设置的初始状态,恐怕唯一简单的方法是再次实例化小部件 - 但我不推荐这样做,因为这通常是一项昂贵的操作。最好只编写一个将字段恢复到预定义状态的方法 - 您也可以使用此方法设置初始状态,而不是在 UiBinder 模板中定义它(并且在某种意义上复制)。我假设您可以在您的类中访问所有必要的字段(因为您在问题中提到通过 Java 代码更改它们的可见性),因此您不必添加一堆字段只是为了在它们上调用 setVisibile

    【讨论】:

    • 三思而后行,我决定将可见性限制保存在单独的结构中,这样我可以在需要它们的任何时候轻松进行。不过还是谢谢你的回答!
    • 没问题 :) 如果您找到了一个有趣的解决您的问题/问题的方法,也许值得在这里分享作为答案(您甚至可以将 is 设置为已接受,因为它 is 您问题的答案),以便其他人可能从中受益?
    【解决方案2】:

    您只需调用 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);
      }
    }
    

    【讨论】:

    • 这很明显,但并不优雅。我需要一个解决方案,它可以在不检查 ui.xml 文件的情况下完成工作。不过还是谢谢
    • 或者我不明白你想做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多