2013-01-22 40 views
2

在我的GWTQuery项目中,我遇到了一个有4个自定义下拉菜单的情况。无论用户何时更改当前菜单选项,都会使用4个菜单的值(其中一个是该菜单新更改的值)进行AJAX请求。由于所有4个菜单都触发了类似的请求,我虽然会写一个公共类来处理AJAX请求,然后让点击处理程序扩展该类。在GWTQuery中为点击元素定义通用处理程序

但是,然后,菜单是动态生成的,我不得不求助于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

改为定义接口。

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类中使用组合。例如:

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); 
    } 
    } 
+0

'request'函数的定义非常大且复杂。所以如果我将它声明为一个接口,我将不得不为所有4个处理程序完全实现,正是我试图避免的。 – SexyBeast

+0

检查编辑。 – Sednus

+0

这将工作与GWTQuery的“活”? – SexyBeast

相关问题