2008-09-17 5 views
1

GWT의 위젯은 다른 위젯에게 자신을 새로 고치거나 다른 작업을 수행하도록 어떻게 알려야합니까?다른 위젯에게 알리는 위젯

sinkEvent/onBrowserEvent를 사용해야합니까? 맞춤 이벤트를 만드는 방법이 있습니까?

답변

3

Observer PatternController을 사용하여이 문제를 해결했습니다. 중앙 컨트롤러는 응용 프로그램의 모든 위젯에 대한 지식을 갖고 있으며 함께 맞는 방식을 결정하는 유일한 클래스입니다. 누군가 위젯 A에서 무언가를 변경하면 위젯 A가 이벤트를 발생시킵니다. 이벤트 핸들러에서 중앙 컨트롤러를 호출하면 ('NotEventObservers()'호출을 통해 중앙 컨트롤러 (및 선택적으로 다른 사람이 있지만 간단하게하기 위해)에 특정 액션 ('MyEvent'열거 형 인스턴스)가 발생했습니다.

이렇게하면 응용 프로그램 흐름 논리가 단일 중앙 클래스에 포함되며 위젯에는 서로에 대한 참조 스파게티가 필요하지 않습니다. 그래서 여기

+0

당신은 내가 한 것과 같은 해결책을 찾아 왔습니다. 먼저 sendNotification, recieveNotification 메커니즘을 시도하면 복잡해질 수 있습니다. 옵저버 패턴이 완벽하고 중앙 컨트롤러가 더 적합합니다. – Drejc

3

매우 개방적인 질문입니다. 예를 들어 위젯이 스스로 구독하는 정적 이벤트 처리기 클래스를 만들 수 있습니다. 예컨대 : customEventHandler 각 명명 된 이벤트에 가입하는 모든 위젯을 추적 한 다음 원하는 추가 메서드를 호출 할 수있는 명명 된 클래스로 update 메소드를 호출

Class newMessageHandler { 
    void update(Widget caller, Widget subscriber) { 
     ... 
    } 
} 

customEventHandler.addEventType("New Message", newMessageHandler); 

Widget w; 
customEventHandler.subscribe(w, "New Message"); 

... 
Widget caller; 

// Fire "New Message" event for all widgets which have 
// subscribed 
customEventHandler.fireEvent(caller, "New Message"); 

. 소멸자에서 unsubscribe를 호출 할 수도 있습니다. 그러나 원하는만큼 멋지게 만들 수 있습니다.

+0

이것은 내가 마음에 가지고있는 것에 대해 효과가있을 수 있으며 확실히 시도해 볼 것입니다. – Drejc

1

내 (샘플) 구현, 이다 첫번째의 새로운 이벤트를 만들어 보자 : 우리가 지금 구현하는 위젯이있는 경우

import com.google.gwt.user.client.EventListener; 

public interface NotificationHandler extends EventListener { 
    void onNotification(NotificationEvent event); 
} 

:

import java.util.EventObject; 
import com.google.gwt.user.client.ui.Widget; 

public class NotificationEvent extends EventObject { 
    public NotificationEvent(String data) { 
     super(data); 
    } 
} 

그런 다음 우리는 이벤트 핸들러 인터페이스를 만듭니다 NotificationHanlder, 우리는 전화로 이벤트를 트리거 할 수 있습니다 :

((NotificationHandler)widget).onNotification(event); 
관련 문제