在GWT页面上启用和禁用“保存”按钮

时间:2010-06-23 03:13:41

标签: javascript events gwt javascript-events textbox

我正在处理的应用程序包含大量文本框的设置数据页面;每个页面都有一个保存按钮。我已将大多数页面定义为* .ui.xml文件,并使用GWT 2.0 UI绑定。

我想添加一个禁用onload的保存按钮,只有在用户将数据修改为其中一个文本框后才会启用。

我知道我可以针对页面上的每个元素注册一个事件处理程序来启用按钮,但我想要一个更优雅的解决方案。理想情况下,我想定义一个“监听”页面上的事件并自行更改的按钮。这在GWT中是否可行?

4 个答案:

答案 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)

答案 2 :(得分:1)

你可以找到一个非常简单的解决方案。

  1. 将所有可编辑控件放在HTMLPanel(或任何其他面板中,如果您愿意)
  2. 在随附的java文件中对此HTMLPanel进行ui:字段引用。
  3. 在java类中调用initWidget后不久,遍历HTMLPanel的所有子窗口小部件,并在每个输入窗口小部件上注册一个ChangeHandler。
  4. 伪代码:

        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处理程序更好,性能更快..