2010-02-18 5 views
1

Nouveau sur GWT ici ...Parler Parmi GWT panneaux à l'aide de la mise en page UIBinder

J'utilise l'approche UIBinder de mise en page d'une application, un peu dans le style de l'échantillon GWT Mail. L'application commence avec un DockLayoutPanel ajouté à RootLayoutPanel dans la méthode onModuleLoad(). Le DockLayoutPanel a un widget statique du Nord et du Sud statique, en utilisant un centre personnalisé défini comme:

public class BigLayoutWidget extends ResizeComposite { 
... 
} 

Ce widget personnalisé est mis à l'aide BigLayoutWidget.ui.xml, qui à son tour se compose d'un TabLayoutPanel (3 onglets) , dont le premier contient un SplitLayoutPanel divisé en WEST (Shortcuts.ui.xml) et CENTER (Workpanel.ui.xml). Les raccourcis, à leur tour, consistent en un StackLayoutPanel avec 3 piles, chacune étant définie dans son propre fichier ui.xml. Je veux que les événements de clic dans l'une des piles individuelles de raccourcis pour changer le contenu de Workpanel, mais jusqu'ici j'ai seulement pu manipuler des widgets dans la même classe. En utilisant le cas le plus simple, je ne peux pas cliquer sur un bouton w/dans Raccourcis pour effacer le contenu de Workpanel ou rendre WorkPanel non visible.

Quelques questions ...

  1. est-ResizeComposite le type de classe à étendre pour cela? Je suis l'approche de l'exemple Mail pour TopPanel, MailList, etc, alors peut-être pas?
  2. Comment puis-je faire en sorte que ces clics manipulent le contenu des panneaux dans lesquels ils ne résident PAS?
  3. Les auditeurs ne sont-ils plus recommandés pour la gestion des événements? Je pensais avoir vu quelque part pendant la compilation que ClickHandlers est utilisé ces jours-ci, et l'approche "abonnement" de l'écouteur de clic est obsolète (j'utilise principalement des annotations @UiHandler)
  4. Y a-t-il un moyen facile de gérer certains éléments? dans mon application/page? (L'application du champ "ID" dans le fichier UI.XML génère un avertissement de désapprobation). Je cherche quelque chose comme un document.getElementById() qui me donne un handle à des éléments spécifiques. Si cela existe, comment puis-je définir le handle/ID sur l'élément, et comment puis-je appeler cet élément par nom/id?

Notez que j'ai la disposition elle-même assez bien clouée; c'est l'interaction d'un panneau modulaire ui.xml à l'autre que je n'arrive pas à obtenir.

Merci d'avance.

Répondre

4
  1. Si vous ne disposez pas d'un emploi pour les événements que il suffit d'utiliser le redimensionnement Composite
  2. Qu'est-ce que vous voulez est ce que les devs GWT appelé bus de messages (mis en oeuvre comme HandlerManager). Vous pouvez obtenir une bonne explication dans le très discuté (par exemple, sur la GWT Google Group, il suffit de chercher 'mvp') présentation par Ray Ryan de Google I/O 2009 qui peut être trouvé here. Fondamentalement, vous "diffusez" un événement sur ce bus de messages, puis un Widget écoutant cet événement reçoit le message et fait son travail.
  3. Oui, * Les gestionnaires sont la manière actuelle de gérer les événements - l'utilisation est fondamentalement la même, donc la migration ne devrait pas poser de problème (docs). Ils l'ont modifié afin qu'ils puissent introduire des champs personnalisés dans le futur, sans casser le code existant.
  4. Si vous avez défini un id pour n'importe quel élément DOM (pour les Widgets j'utilise someWidget.getElement().setId(id), généralement en combinaison avec DOM.createUniqueId()), vous pouvez l'obtenir via GWT.get(String id).Vous obtiendrez alors un RootPanel que vous devrez lancer dans la bonne classe Widget - comme vous pouvez le voir, il peut être un peu "hackish" (que se passe-t-il si vous changez le type du Widget par cet identifiant?), donc je recommande de rester avec MVP (voir le premier point) et de communiquer via le bus de messages. Rappelez-vous cependant, que parfois il est également bon de regrouper - tout ne doit pas être traité par le bus de message :)

Bottom line est que je vous recommande embrasser MVP (et History) le plus rapidement possible - il fait GWT développement beaucoup plus facile et moins en désordre :) (Je sais par expérience, qu'avec le temps le code commence à ressembler à un cauchemar, si vous ne le divisez pas en présentation, vue, etc.)

Questions connexes