Включение и отключение кнопки Сохранить на странице GWT - PullRequest
5 голосов
/ 23 июня 2010

В приложении, над которым я работаю, есть страницы с установочными данными и множеством текстовых полей;каждая страница имеет кнопку сохранения.Я определил большинство страниц как файл * .ui.xml и использовал привязку пользовательского интерфейса GWT 2.0.

Я хотел бы добавить кнопку сохранения, которая отключена при загрузке и включена только после того, как пользователь изменилданные в одно из текстовых полей.

Я знаю, что могу зарегистрировать обработчик событий для каждого элемента на странице, чтобы включить кнопку, но я хотел более элегантное решение.В идеале я хотел бы определить кнопку, которая «слушает» события на странице и меняет себя.Возможно ли это в GWT?

Ответы [ 4 ]

5 голосов
/ 23 июня 2010

Вы также можете добавить событие изменения ко всему содержащему виджет, используя addDomHandler

public class SetupDataPage extends Composite{

  // Binder stuff  

  // Button from the binder
  @UiField Button saveBtn;

  public SetupDataPage(){
        addDomHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent event) {
                saveBtn.setEnabled(true);
            }
        }, ChangeEvent.getType());
  }
}

Осторожно Это вызовет событие для всех текстовых полей в SetupDataPage. С другой стороны, это может не работать для некоторых конкретных виджетов. Я знаю, что это работает для текстового поля, флажка, списка GWT ...

2 голосов
/ 23 июня 2010

Ознакомьтесь со статьями GWT на MVP
http://code.google.com/webtoolkit/articles/mvp-architecture.html
http://code.google.com/webtoolkit/articles/mvp-architecture-2.html

В частности, часть о событиях и шине событий.

Также посмотрите наэто http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/8b0ae5eaf84d8bc2?hide_quotes=no

1 голос
/ 27 июня 2010

DOM Handler лучше и будет работать быстрее ..

1 голос
/ 23 июня 2010

Вы можете найти очень простое решение для этого.

  1. Поместите все свои редактируемые элементы управления в HTMLPanel (или любую другую панель, если хотите)
  2. Есть пользовательский интерфейс:ссылка на поле этой HTMLPanel в сопроводительном Java-файле.
  3. Вскоре после того, как вы вызовете initWidget в своем Java-классе, выполните итерацию по всем дочерним виджетам HTMLPanel и зарегистрируйте ChangeHandler в каждом входном виджете.

Псевдокод:

    for ( int i = 0; i < hTMLPanel.getWidgetCount( ); i++ )
    {
        Widget widget = hTMLPanel.getWidget( i );

        if ( widget instanceof HasChangeHandlers )
            ((HasChangeHandlers)widget).addChangeHandler( <Your Change Handler to enable save>);
    }

Вы можете сделать это рекурсивным, если у вас есть вложенные виджеты.

...