2010-07-13 3 views
2

J'ai quelques questions concernant GWT (2.1) avec MVP et les événements.EventHandling dans GWT avec LayoutPanels

Got DockLayoutPanel avec quelques composants dedans. Un composant Tree à l'ouest et un SimplePanel au centre. Chaque composant a un présentateur et une vue. Le problème est que je veux gérer les événements de composants dans leur classe de présentateur, mais maintenant ils ne sont attrapables que dans le conteneur qui est le DockLayoutPanelPresenter. Je veux gérer les événements de l'arbre dans le TreePresenter. Je pense que TreePresenter devrait gérer ses événements 'SelectedItem' et le mettre sur le eventbus pour que mes autres composants puissent y réagir.

Est-ce que quelqu'un d'autre a fait face à cela? Publié sur la liste des groupes GWT, mais n'a pas reçu de réponse. Je pense que c'est un sujet important pour le découplage des composants.

+0

Pouvez-vous clarifier votre design un peu plus? Donc, vous avez un TreePresenter et vous avez attaché un arbre comme vue. La partie vue déclenche un événement et vous souhaitez capturer cet événement dans le présentateur? Et que voulez-vous dire quand vous dites qu'il est seulement attrapable dans le conteneur? – igorbel

+0

J'ai tapé une réponse assez détaillée dans ce fil où j'ai expliqué comment j'ai résolu l'expédition dans mon application gwt. Peut-être que cela peut vous aider? http://stackoverflow.com/questions/2832779/is-there-a-recommended-way-to-use-the-observer-pattern-in-mvp-using-gwt/2832919#2832919 –

+0

Banang vous a déjà donné le meilleur répondre, à mon humble avis. Utilisez un bus d'événements pour que différentes parties de votre code d'interface fonctionnent les unes avec les autres sans avoir à se connaître les unes les autres. Le seul problème * potentiel * avec le bus d'événements est d'avoir une application très bavarde, c'est-à-dire que trop d'événements se déclenchent et que trop de gestionnaires doivent répondre. Inquiet de ce problème une fois que vous y arrivez. –

Répondre

0

Dans ce cas, où les différentes régions de la page ont chacun un présentateur, vous pouvez utiliser l'approche suggérée par David Chandler de l'équipe GWT:

http://groups.google.com/group/google-web-toolkit/browse_thread/thread/2812e1b15a2a98a6/8c82d629b7a48e56?lnk=gst&q=EastActivityMapper#8c82d629b7a48e56

Vous devriez lire le message, mais résumé, vous feriez quelque chose comme ceci:

WestActivityMapper westActivityMapper = new WestActivityMapper(); 
WestActivityManager westActivityManager = new WestActivityManager(westActivityMapper, eventBus); 
westActivityManager.setDisplay(westPanel); 

EastActivityMapper EastActivityMapper = new EastActivityMapper(); 
EastActivityManager eastActivityManager = new EastActivityManager(eastActivityMapper, eventBus); 
EastActivityManager.setDisplay(eastPanel); 

dockLayoutPanel.addWest(westWidget, 50); 
dockLayoutPanel.addEast(eastWidget, 50); 
RootLayoutPanel.get().add(dockLayoutPanel); 

l'activité ouest mappeur serait responsable de l'affichage de votre arbre et le cartographe est contiendrait le corps de votre application.

Nous utilisons cette approche pour afficher une liste d'éléments dans notre panneau ancré ouest (pas un arbre, mais assez proche) qui met alors à jour ce qui est affiché dans le corps de notre application. Lorsqu'un utilisateur sélectionne un élément de la liste, nous déclenchons un nouvel événement Place et incluons l'identifiant de l'élément de liste en tant que jeton de lieu, de sorte que l'utilisateur puisse utiliser le bouton de retour. Cependant, vous pouvez également utiliser le EventBus comme vous l'avez indiqué.