Кнопка Enabling и Disabling Save на странице GWT

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

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

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

5
задан Tihom 23 June 2010 в 03:13
поделиться

4 ответа

Вы также можете добавить событие изменения ко всему содержащему его виджету, используя 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());
  }
}

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

5
ответ дан 14 December 2019 в 01:01
поделиться

Ознакомьтесь со статьями 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

2
ответ дан 14 December 2019 в 01:01
поделиться

Вы можете найти очень простое решение.

  1. Поместите все ваши редактируемые элементы управления в HTMLPanel (или любую другую панель, если хотите)
  2. Имейте ссылку ui:field на эту 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>);
    }

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

1
ответ дан 14 December 2019 в 01:01
поделиться

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

1
ответ дан 14 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: