ExtJS: ajuste dynamiquement mise en page après l'ajout/la suppression de certains champs de formulaire
J'ai la présentation d'un formulaire avec certaines TextField éléments et un HtmlEditor élément. Certains Champs sont des éléments de "masquer", c'est à dire pourrait être caché ou montré. Après masquage/affichage des éléments HtmlEditor instance break layout — il semble vide de l'espace ou d'un élément n'a pas de fin à la bordure de fenêtre.
Est-il possible de dire à HtmlEditor exemple d'utilisation restante de l'espace disponible? Même dans le cas où certains éléments sont caché/montré.
J'ai essayé d'utiliser anchor
de la propriété, mais il fonctionne bien jusqu'à ce que certains éléments supprimés à partir de la mise en page.
Mis à jour
Voici un exemple de code:
var htmlEditor = new Ext.form.HtmlEditor({
anchor: '100% -54',
hideLabel: true
});
var fp = new Ext.form.FormPanel({
items: [{xtype: 'textfield', fieldLabel: 'zzz', mode: 'local'},
{xtype: 'textfield', fieldLabel: 'nnn', id: 'id-one', mode: 'local'},
htmlEditor]
});
var w = new Ext.Window({layout: 'fit',
height: 400, width: 600,
tbar: [{text: 'click',
handler: function() {
//hide element
Ext.getCmp('id-one').getEl().up('.x-form-item').setDisplayed(false);
w.doLayout();
}
}],
items: fp
});
w.show();
Exécuter, cliquez sur bouton de barre d'outils ", cliquez sur", un champ doit disparaître, puis regardez dans le vide au-dessous de htmleditor.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous ajoutez/supprimez des composants d'un conteneur, vous devez appeler le Conteneur.doLayout() pour l'avoir à recalculer les dimensions.
[EDIT]: Notez que cela s'applique uniquement aux Ext <= 3.x. En 4.x le système de disposition gère pour vous. Bien que la méthode est toujours là, vous ne devriez jamais avoir à l'utiliser.
anchor
propriété et le videanchorSpec
propriété de htmlEditor.[Nouvelle réponse afin que je puisse formater le code]
Une approche serait de faire de votre extérieur mise en page quelque chose de plus conçu pour faire ce que vous voulez, comme, disons, un BorderLayout nord (votre top des champs) et le centre (l'éditeur html). De cette façon, le html de l'éditeur pourrait simplement être fixé à 100% de la hauteur de son contenant (la région centre). Dans ce cas, puisque la mise en page serait bien gérés, mon précédent doLayout() conseil devrait fonctionner.
Si vous voulez vraiment gérer les champs en dehors d'une mise en page qui va vous aider à le faire, alors ce sera à vous de gérer les hauteurs manuellement. La modification de la propriété anchor est une façon d'aller. La façon dont je l'ai fait dans le passé (et il est plus préférable) est à écouter à un événement approprié et définir la taille des composants selon les besoins. Ainsi, par exemple, vous pouvez ajouter un redimensionnement de l'auditeur à la fenêtre:
À l'aide de votre code de test, cela vous arrive assez proche. Cependant, dans le code réel, vous voulez à réellement obtenir la hauteurs de vos composants visibles et soustrait ce nombre, plutôt que de coder en dur, mais vous obtenez l'idée. Une façon de rendre cette approche plus simple est d'ajouter votre top des champs à un Panneau séparé qui est autoHeight:true, puis après affichage ou masquage des champs, il suffit de mesurer la hauteur du Panneau et de la soustraire à la hauteur de la fenêtre (plus les marges/padding) pour obtenir votre éditeur html hauteur (c'est ce que j'ai fait dans le passé quand je ne pouvais pas compter sur une mise en page pour les gérer).
Comme vous pouvez le voir, il existe de nombreuses façons de la peau, ce chat, de sorte que vous pouvez choisir l'approche qui vous convient le mieux.
essayez de mettre ce
Ext.getCmp('id-one').getEl().up('.x-form-item').setDisplayed(false);
à l'intérieur de la fenêtreafterlayout
événement et en y ajoutant une condition qu'il n'y...comme ceci:
espérons que cette aide!
utilisation
autoHeight:true
et la fenêtre est redimensionnée pour s'adapter à l'conteneur.vous devez utiliser la "visibilité" de la propriété de l'élément. Le truc, c'est que même les éléments invisibles prend de la place sur la page.