在我的GWTQuery项目中,我遇到了有4个自定义下拉菜单的情况。每当用户更改任何当前菜单选项时,都会使用 4 个菜单的值(其中一个是该菜单的新更改值)发出 AJAX 请求。由于所有 4 个菜单都触发了类似的请求,因此我将编写一个公共类来处理 AJAX 请求,然后让点击处理程序扩展该类。
但是,菜单是动态生成的,我不得不求助于GWTQuery的live
方法。这将一个类型为 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
...
}
}
一件事,为所有 4 个菜单定义一个包含AJAX_handler函数的通用处理程序,然后检测当前处理程序引用哪个菜单是不行的。AJAX_handler类必须是单独的类。
改为定义接口。
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);
}
}