我正在处理的应用程序包含大量文本框的设置数据页面;每个页面都有一个保存按钮。我已将大多数页面定义为* .ui.xml文件,并使用GWT 2.0 UI绑定。
我想添加一个禁用onload的保存按钮,只有在用户将数据修改为其中一个文本框后才会启用。
我知道我可以针对页面上的每个元素注册一个事件处理程序来启用按钮,但我想要一个更优雅的解决方案。理想情况下,我想定义一个“监听”页面上的事件并自行更改的按钮。这在GWT中是否可行?
答案 0 :(得分:5)
您还可以使用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的文本框,复选框,列表框......
答案 1 :(得分:2)
查看有关MVP的GWT文章
http://code.google.com/webtoolkit/articles/mvp-architecture.html
http://code.google.com/webtoolkit/articles/mvp-architecture-2.html
特别是关于事件和事件总线的部分。
答案 2 :(得分:1)
你可以找到一个非常简单的解决方案。
伪代码:
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>);
}
如果你有嵌套的小部件,你可以使这个递归。
答案 3 :(得分:1)
DOM处理程序更好,性能更快..