Приложение я продолжаю работать, имеет страницы данных установки с большим количеством текстовых полей; каждая страница, имеющая кнопку сохранения. Я определил большинство страниц как файл *.ui.xml и использовал привязку GWT 2.0 UI.
Я хотел бы добавить кнопку сохранения, которая отключена onload и только включена после того, как пользователь изменяет данные в одно из текстовых полей.
Я знаю, что могу зарегистрировать обработчик событий против каждого элемента на странице для включения кнопки, но я хотел более изящное решение. Идеально, я хотел бы определить кнопку, которая "слушает" события на странице и изменяет себя. Действительно ли это возможно в GWT?
Вы также можете добавить событие изменения ко всему содержащему его виджету, используя 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, флажка, списка ...
Ознакомьтесь со статьями 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
Вы можете найти очень простое решение.
Псевдокод:
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>);
}
Вы можете сделать это рекурсивным, если у вас есть вложенные виджеты.