2008-09-18 23 views
4

J'ai créé un panneau de formulaire, et je suis en train de rendre deux boîtes de style dans le panneau avec un magasin qui est rempli via un gestionnaire de réponse. le problème si je veux rendre le panneau à nouveau il rend les zones de liste déroulante sans le magasin, bien que je reconstruise le panneau. j'ai essayé de déboguer pour comprendre la cause et étonnamment bien que pour la zone de liste déroulante le Store est nul sur l'appel - comboBox.setStore (magasin) il vérifie la propriété (isRendered) et trouve qu'il est vrai et n'ajoute pas le stocker mais garder juste le magasin existant qui est encore nul.re-rendu du magasin combox dans Gwt-Ext

J'ai vu ce problème dans un autre scénario où j'avais créé un jeu de champs pliable contenant la zone de liste déroulante, Sur minimiser et maximiser le jeu de champs que le magasin disparaît pour les mêmes raisons. Est-ce que quelqu'un peut m'aider s'il vous plaît ici, je suis complètement frappé ici j'ai essayé diverses options, mais rien ne fonctionne.

Répondre

0

Avez-vous essayé doLayout() méthode de FormPanel?

0

ComboBox.view.setStore() devrait aider.

Si la vue est une variable privée, essayez simplement de la mentionner entre les paramètres de configuration Combobox lors de la création. Si cela ne permet pas - vous pouvez utiliser le plugin comme ça:

view_plugin = { 

    init: function(o) { 

      o.setNewStore = function(newStore) { 
       this.view.setStore(newStore); 
      }; 
    } 
}; 

et ajouter une ligne de

plugins: view_plugin, 

à COMBOBOX config.

Ensuite, vous pouvez appeler combobox.setNewStore (newStore) plus tard dans le code.

0

Vous devez écrire:

field = new ComboBox({plugins: view_plugin});

Dans votre cas et définir mon code de view_pligin quelque part. Ou vous pouvez même incorporer en ligne:

field = new ComboBox({plugins: { code of plugin });

intérieur de plugin toutes les propriétés privées et les méthodes sont accessibles/modifiables.

Vous pouvez également changer de magasin en utilisant field.setNewStore(store) à tout moment plus tard.

2

Merci pour vos commentaires, en fait j'ai essayé l'approche de plugin mais je ne pouvais pas comprendre complètement comment je vais obtenir la poignée du magasin qui n'est pas un élément exposé du composant. De toute façon, j'ai essayé quelque chose d'autre, tout en déboguant j'ai trouvé que si je crée à nouveau le composant sur le bouton click of show, l'ID passé est identique (ce qui est souhaité) mais d'une manière ou d'une autre référence disponible dans Ext.Components.

D'où une solution facile est la suivante: Component comp = Ext.getCmp (id); if (comp! = Null) comp.destroy();

Ceci a réellement fonctionné comme la référence qui provoquait la retour de la propriété (isRendered() de la ComboBox true n'est plus disponible et par conséquent je peux voir le magasin à nouveau correctement.J'espère que cela aidera d'autres personnes confrontées à un problème similaire. Merci quand même pour votre réponse.