GWT восстанавливает ограничения видимости от uiBinder

1

Скажем, у меня есть некоторые компоненты с visible="false" свойство в моем файле ui.xml, и в моем java-коде я показал некоторые из этих компонентов. Есть ли простой способ/метод для восстановления ограничений видимости, хранящихся в uiBinder, поэтому я получаю конфигурацию основных компонентов?

Теги:
gwt
restore
visibility
restrictions

2 ответа

2

Нет, UiBinder не работает таким образом. Файл ui.xml используется во время компиляции для генерации кода Java для вас. Таким образом, ваш visible="false", вероятно, приведет к генерации вызова для UiObject.setVisible и т.д. Этот код запускается при вызове initWidget(uiBinder.createAndBindUi(this)); , Если вы хотите "восстановить" ваш виджет в этом начальном состоянии, установленном UiBinder, я боюсь, что единственный простой способ - снова создать экземпляр виджета, но я не рекомендую это, поскольку обычно это дорогостоящая операция. Лучше просто написать метод, который восстанавливает поля в предопределенное состояние - вы можете использовать этот метод, чтобы также установить начальное состояние, а не определять его (и дублировать в некотором смысле) в шаблоне UiBinder. Я предполагаю, что у вас есть все необходимые поля, доступные в вашем классе (поскольку вы упомянули об изменении своей видимости с помощью Java-кода в своем вопросе), поэтому вам не нужно добавлять кучу полей, чтобы просто вызвать setVisibile.

  • 0
    Во-вторых, я решил держать ограничения видимости в отдельной структуре, чтобы я мог легко в любое время, когда они мне нужны. Но все равно спасибо за ответ!
  • 0
    Нет проблем :) Если вы нашли интересное решение вашей проблемы / вопроса, может быть , стоит разделять здесь в качестве ответа (вы даже можете установить это как принято, так как это ответ на ваш вопрос) , чтобы другие могли бы извлечь из этого пользу ?
0

Вам просто нужно позвонить 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);
  }
}
  • 0
    Это очевидно и не элегантно. Мне нужно решение, которое будет делать работу, даже не проверяя файл ui.xml. Но все равно спасибо
  • 0
    Или я не понимаю, что ты хочешь делать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню