2009-08-27 7 views
3

Fondamentalement, j'ai une fenêtre contenant un formPanel avec des éléments, qui est partagée à plusieurs endroits. Cela signifie que les éléments de formPanel peuvent varier légèrement. (le type de contrôles).ExtJS - Éléments FormPanel clear & dynamic reload

J'ai réussi à effacer dynamiquement et ajouter des boutons personnalisés pour la situation appropriée sur la fenêtre.

Mais je rencontre un léger problème avec les éléments de formPanel.

Creuser dans à la source, je trouve que, dans la méthode Ext.Container InitComponent il y a ce petit morceau de code:

var items = this.items; 
if(items){ 
    delete this.items; 
    if(Ext.isArray(items)){ 
     this.add.apply(this, items); 
    }else{ 
     this.add(items); 
    } 
} 

Cela semble être semblable à ce que je suis en train de réaliser. Suppression de tous les éléments en cours et appeler la méthode formPanel.add serait une nouvelle fois invoquer ce code:

if(!this.items){ 
    this.initItems(); 
} 

Tout cela est bien jusqu'ici. Et la charge initiale de la forme fonctionne parfaitement. Bien que, lorsque je cache la fenêtre, et que je l'ouvre à nouveau, le clear/reload des éléments fonctionne parfaitement sur mon composant, mais les childNodes/items précédents sont toujours présents dans dom.children et dom.innerHTML.

Ainsi mon formPanel affiche maintenant deux ou plusieurs ensembles de contrôles qui n'ont aucune valeur, et les contrôles nouvellement chargés en bas avec les valeurs réelles.

J'appelle formPanel.doLayout() après l'effacement/l'ajout d'éléments.

J'ai également essayé d'appeler la méthode formPanel.remove sur chaque élément actuellement sur le formPanel, mais je me retrouve toujours avec l'affichage des doublons, et la mise en page ne semble pas ancrer/ancrer correctement, car je me retrouve avec une barre de défilement horizontale sous chaque élément. Que puis-je faire d'autre pour effacer/recharger les fichiers dom.children et dom.innerHTML?

Toute aide serait grandement appréciée. Je suis en train d'utiliser ExtJS 2.1 si ça change quelque chose. J'utilise ExtJS 2.1.

Répondre

1

Si chaque conteneur enfant possède son propre programme de mise à jour, vous devriez pouvoir récupérer le programme de mise à jour du panneau, le déclencher et déclencher tous ses programmes de mise à jour pour enfants. De cette façon, vous n'êtes pas en train de supprimer/ajouter des composants de façon répétitive, mais plutôt de les 'rafraîchir'. En dehors de la curiosité, qu'est-ce que vous essayez vraiment de faire? Vous rechargez simplement les données contenues dans les champs de formulaire de FormPanel?

+0

Salut Steve. Ce n'est pas le rafraîchissement des contrôles.J'ai une fenêtre avec un panneau de formulaire, qui n'est pas disposé quand je le ferme, il devient seulement caché. Mais quand je le rouvre, je veux effacer tous les éléments sur le panneau de formulaire, et ajouter un ensemble différent de contrôles. C'est un peu un mode readOnly et editable, seulement, les contrôles utilisés dans les modes readOnly et editable sont des types de contrôles totalement différents. Et je n'ai pas voulu déclarer 2 fenêtres avec leurs propres panneaux de forme si la seule chose qui change est les éléments dessus. Les changements apportés au panneau de formulaire ne sont pas poussés à la duplication. – Jabezz

+0

Jabezz, comme un coup très rapide, avez-vous essayé de fermer la fenêtre au lieu de le cacher? Fermer une fenêtre la détruit avec les enfants. Dans tous les cas, un extrait de votre code source serait utile ici. – mxgrn

0

Cela signifie-t-il que vous ne voulez pas détruire le panneau de formulaire à dessein? Est-ce que la fenêtre contient autre chose que le panneau de formulaire. Si la fenêtre contient le seul panneau de formulaire ou contient le panneau de formulaire comme la plus grande partie, alors je pense qu'il est conseillé de détruire la fenêtre lorsque vous fermez la fenêtre et laissez-la recréer chaque fois que vous en voulez un.

Dans ce cas, vous pouvez passer un paramètre à la fonction qui crée la fenêtre pour dire quel type de contrôles vous voulez (prêt seulement/inscriptible).