문제

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

inkEvent/onBrowserEvent를 사용해야 합니까?그렇다면 맞춤 이벤트를 만들 수 있는 방법이 있나요?

도움이 되었습니까?

해결책

나는이 문제를 다음을 사용하여 해결했습니다. 관찰자 패턴 그리고 중앙 제어 장치.중앙 컨트롤러는 애플리케이션의 모든 위젯에 대한 지식을 갖고 있고 위젯이 서로 맞는 방식을 결정하는 유일한 클래스입니다.누군가 위젯 A에서 무언가를 변경하면 위젯 A가 이벤트를 발생시킵니다.이벤트 핸들러에서는 'notifyObservers()' 호출을 통해 중앙 컨트롤러를 호출합니다. 이 호출은 중앙 컨트롤러(선택적으로 다른 컨트롤러도 있지만 단순화를 위해 여기서는 다루지 않음)에 특정 작업('MyEvent' 열거형 인스턴스 전달)을 알립니다. )이 발생했습니다.

이러한 방식으로 애플리케이션 흐름 로직은 단일 중앙 클래스에 포함되며 위젯에는 서로에 대한 참조가 필요하지 않습니다.

다른 팁

이는 매우 개방적인 질문입니다. 예를 들어 위젯이 스스로 구독하는 정적 이벤트 핸들러 클래스를 직접 만들 수 있습니다.예:

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");

customEventHandler는 명명된 각 이벤트를 구독하는 모든 위젯을 추적하고 명명된 클래스에서 업데이트 메서드를 호출합니다. 그런 다음 원하는 추가 메서드를 호출할 수 있습니다.소멸자에서 unsubscribe를 호출하고 싶을 수도 있지만 원하는 대로 멋지게 만들 수도 있습니다.

다음은 (샘플) 구현이 있습니다. 먼저 새 이벤트를 만들어 봅시다.

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

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

그런 다음 이벤트 핸들러 인터페이스를 만듭니다.

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

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

이제 UntificationHanlder를 구현하는 위젯이있는 경우 다음을 호출하여 이벤트를 트리거 할 수 있습니다.

((NotificationHandler)widget).onNotification(event);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top