在GWTQuery中为click元素定义公共处理程序

时间:2013-01-22 18:32:20

标签: java gwt gwtquery

在我的GWTQuery项目中,我有一种情况,其中有4个自定义下拉菜单。每当用户更改任何当前菜单选项时,都会使用4个菜单的值(其中一个菜单是该菜单的新更改值)进行AJAX请求。由于所有4个菜单都触发了类似的请求,我会写一个公共类来处理AJAX请求,然后让clickhandlers扩展该类。

但是,然后,动态生成菜单,我不得不求助于GWTQuery的live方法。这会将Function类型的变量作为参数。既然它已经扩展了Function,我也无法扩展我的Ajax处理程序类。那我该怎么做?我正在寻找这样的东西:

class f extends Funnction, AJAX_Handler {
 public boolean f(Event e) {
  ...
  return true;
  }
 public void request(int i1,int i2,int i3,int i4) {
  //for handling the request, defined in the AJAX_Handler class
  ...
  }
 }

有一件事,为包含AJAX_handler函数的所有4个菜单定义一个通用处理程序,然后检测哪个菜单是当前处理程序引用的是禁忌。 AJAX_handler类必须是一个独立的类。

1 个答案:

答案 0 :(得分:1)

改为定义接口。

 public interface AJAX_Handler
 {
    public void request(int i1,int i2,int i3,int i4);

 }

然后在实际的类中实现定义的接口。

 class f extends Funnction implements AJAX_Handler
 {
   public boolean f(Event e) {
      ...
    return true;
    }
   public void request(int i1,int i2,int i3,int i4) {
   //for handling the request, defined in the AJAX_Handler class
    ...
    }
  }

[编辑]    鉴于您需要将功能保持在同一个位置。我认为最简单的解决方法是定义AJAX_Handler接口然后有一个实现的类。例如:

 public class AJAX_HandlerImpl implements AJAX_Handler
 {
    public void request(int i1,int i2,int i3,int i4){
         //do whats necessary
     }
 }

然后在你的f类中使用composition。类似的东西:

 class f extends Funnction implements AJAX_Handler
 {
   private AJAX_HandlerImpl impl = new AJAX_HandlerImpl();

   public boolean f(Event e) {
      ...
    return true;
    }

   public void request(int i1,int i2,int i3,int i4) {
          impl.request(i1,i2,i3,i4);
    }
  }