2011-06-17 3 views
1

J'ai créé un widget qui est une sous-classe de Composite et qui contient un com.extjs.gxt.ui.client.widget.Viewport. Dans cette fenêtre, j'ai ajouté mon composant d'en-tête, un LayoutComponent (initialement vide) et mon composant footer. J'initialisés le widget composite en appelant initWidget à la fin du constructeur qui met tout en place ... quelque chose comme ça (un code supprimé pour une meilleure lisibilité):Mise à jour dynamique du contenu des widgets Composite GWT

public class MyComposite extends Composite { 
    ... 

    public MyComposite(...) { 
     viewport = new Viewport(); 
     viewport.add(new Header()); 

     content = new LayoutContainer(); 
     viewport.add(content); 

     viewport.add(new Footer()); 

     initWidget(viewport); 
    } 

    public void show(Widget... widgets) { 
     content.removeAll(); 
     for (Widget widget: widgets) content.add(widget); 
    } 
} 

Puis-je ajouter une instance de ce aux RootPanel:

MyComposite myComposite = new MyComposite(...); 
RootPanel.get("myComposite").add(myComposite); 

Et devinez quoi ... ça marche! Je le vois. L'en-tête s'affiche, le pied de page s'affiche et le contenu est vide à ce stade. Bien. Ensuite, je fais l'appel pour montrer et ajouter des choses à cela. Pas exactement comme suit, mais par exemple:

myComposite.show(new Label(...)); 

Mais rien ne se passe. Le code s'exécute, la méthode add (...) est appelée depuis la méthode show (...), il n'y a pas d'exception, mais rien (new) n'apparaît. Je n'utilise pas d'étiquette, mais ce n'est pas le problème (vérifié, ça marche ailleurs). Lorsque j'inspecte le DOM dans le navigateur, je vois qu'il y a un div pour le contenu, comme il y en avait initialement, mais il est resté vide (c'est-à-dire aucun contenu du corps).

Qu'est-ce qui me manque?

Merci!

+0

Je devrais également noter que le LayoutContainer est com.extjs.gxt.ui.client.widget.LayoutContainer et fonctionne tout seul. J'ai trouvé une question similaire sur stackoverflow.com - quelqu'un a prolongé un composant du panneau et rien ne s'est montré du tout et il a été conseillé d'étendre Composite à la place et de contenir réellement le panneau. Alors que ce sont des considérations importantes pour de nombreuses raisons, je ne comprends pas pourquoi cela devrait faire une différence pour savoir si la chose fonctionne (montre) du tout! – Learner

Répondre

4

Tout d'abord, étendez-vous GWT Composite ou GXT Composite? Si c'est le type de GXT vous devez appeler InitComponent() sur la fenêtre (plutôt que initWidget) comme décrit ici: http://dev.sencha.com/deploy/gxtdocs/com/extjs/gxt/ui/client/widget/Composite.html

Aussi, essayez d'ajouter la ligne suivante à la fin de votre méthode show: content.layout (vrai); Cela forcera GXT à structurer le contenu de votre LayoutContainer, et vous devriez au moins voir les nouveaux éléments ajoutés au DOM. Si elles n'apparaissent toujours pas à l'écran, vous devez modifier votre disposition de votre LayoutContainer.

+0

com.google.gwt.user.client.ui.Composite. Va essayer content.layout (true) maintenant et vous le ferai savoir. – Learner

+0

Ouais! Ça marche! Merci beaucoup! – Learner

+0

Juste un mot d'avertissement mélangeant GXT et GWT peut provoquer des résultats inattendus ... –