在我的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类必须是一个独立的类。
答案 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);
}
}