单击GWT即可触发多次单击事件

Aka*_*uja 1 java gwt

我有一个FlexTable并且有一个与之关联的点击事件.有时会发生多次事件被触发的事件.有时一次点击最多10次.我检查了多个事件处理程序,但我只有一个.从案例中可以明显看出,它有时每次点击只运行一次.

有没有人知道为什么会发生这种情况.

这是示例代码片段,我尝试调试它,发现点击处理程序多次启动.

        private FlexTable flex = new FlexTable(); //it is a global variable
        function A(){
          flex.clear();
          flex.removeAllRows();
          flex.removeAllRows();
          flex.setBorderWidth(2);
          flex.setCellPadding(2);
          flex.setCellSpacing(2);
          flex.getRowFormatter().addStyleName(0, "historyTableHeader");
          flex.setText(0, 0, "ID");
          flex.setText(0, 1, "TIME);
          flex.addClickHandler(new ClickHandler() {
              public void onClick(ClickEvent event) {
                  //some code which might result into call of function B
              }
       }

      //function A is being called multiple times by say function B
Run Code Online (Sandbox Code Playgroud)

Chr*_*ach 6

你已经回答了你的问题:

flex.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
       //some code which might result into call of function B
    }
}
//function A is being called multiple times by say function B
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ClickHandler存在多次.您可以将代码更改为:

private FlexTable flex = new FlexTable(); //it is a global variable
private ClickHandler handler = null;

private void A(){
    flex.clear();
    //
    if(handler == null){
        handler = new ClickHandler(){}...
        flex.addHandler(handler);
    }
Run Code Online (Sandbox Code Playgroud)

更好:

private FlexTable flex = new FlexTable(); //it is a global variable
private HandlerRegistration handler = null;

private void A(){
    flex.clear();
    //
    if(handler != null){
        handler.removeHandler(); 
    }
    handler = flex.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
       //some code which might result into call of function B
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我建议在创建FlexTable之后直接添加处理程序,并且只需要一次.