2013-01-22 2 views
2

내 GWTQuery 프로젝트에는 4 개의 사용자 정의 드롭 다운 메뉴가있는 경우가 있습니다. 사용자가 현재 메뉴 선택 항목을 변경할 때마다 AJAX 요청은 4 개의 메뉴 값 중 하나 (새로 변경된 메뉴 값 중 하나임)로 이루어집니다. 모든 4 개의 메뉴가 비슷한 요청을 트리거하기 때문에 AJAX 요청을 처리 할 공통 클래스를 작성한 다음 클릭 핸들러가 해당 클래스를 확장하도록합니다.GWTQuery의 클릭 요소에 대한 공통 핸들러 정의

하지만 메뉴가 동적으로 생성되므로 GWTQuery의 live 메서드를 사용해야합니다. 그리고 그것은 변수로 Function을 매개 변수로 취합니다. Function이 이미 확장되어 있으므로 Ajax 핸들러 클래스를 확장 할 수 없습니다. 그러면 어떻게해야합니까? 를 참조하여 현재의 핸들러 인 메뉴 감지 다음의 AJAX_handler 기능을 포함 4 개 메뉴에 대한 일반적인 핸들러를 정의

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 클래스는 별도의 클래스 여야합니다.

답변

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의 'live'와 함께 작동합니까? – SexyBeast

관련 문제