Kamil K.

Kamil K. Senior Software
Engineer

Temat: HandlerManager - jak go użyć?

Do budowy GUI użyłem UiBindera. Poniżej zamieszczam uproszczony diagram klas:

Obrazek


Zdarzenia z klas UploadPanel i DisplayPanel powinny wywoływać akcję w MyOtherPanel.

Użyłem HandlerManager'a aby skorzystać z mechanizmu Listenerów.

Mam problem z tym gdzie zinstancjonować HandlerManager'a i jak go przekazywać do innych klas?
Próbowałem np. w MainWindow a konstruktor HandlerManager'a wymaga source'a więc przekazałem mu (zgodnie z tym co jest na diagramie) myop. Tu też zrobiłem addHandler.
Teraz tego managera przekazałem poprzez settery do klas Shortcuts a następnie do UploadPanel i DisplayPanel. Ale w tych dwóch klasach handlerManager jest null'em. Może ma to związek z UiBinderem i tym że nie inicjalizuję obiektów ręcznie tylko poprzez initWitget(...).

Próbowałem załatwić to singletonem ale przez to że trzeba mu podać source, też mi się nie udało.

Podsumowując moje pytanie.
Jak sobie poradzić z tym żeby zdarzenia w UploadPanel i DisplayPanel wpływały na MyOtherPanel? Gdzie umieścić HandlerManager'a?
Bardzo proszę o wskazówkę.Kamil Kuchta edytował(a) ten post dnia 31.12.10 o godzinie 22:07
Jakub Grabowski

Jakub Grabowski Tworzenie aplikacji,
integracja SOA,
outsourcing,
szkolen...

Temat: HandlerManager - jak go użyć?

W GWT jest gotowy, elegancki mechanizm do takich rzeczy. Możesz skorzystać z EventBus, wrzucać tam zdarzenia i zasubskrybować się na nie w odpowiednich komponentach (poprzez dodanie handlera do event bus).
Żeby to zadziałało musisz zaprojektować klasę eventu (rozszerzającą GwtEvent) i interfejs handlera (rozszerzajacy EventHandler).
EventBus'a możesz sobie na początek zrobić jako pole statyczne w Main (static final EventBus eventBus = new SimpleEventBus()). Alternatywnie możesz wykorzystać ClientFactory, albo wstrzykiwanie przez GIN.
Aby wysłać event robisz Main.getEventBus().fireEvent(event), a w komponentach, które mają otrzymywać zdarzenia implementujesz interfejs handlera i subskrybujesz się poprzez Main.getEventBus().addHandler(handlerType, this).
Kamil K.

Kamil K. Senior Software
Engineer

Temat: HandlerManager - jak go użyć?

Dzięki wielkie za bardzo pomocną i szeroką odpowiedź!



Wyślij zaproszenie do