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!
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