2010-03-05 6 views
2

J'ai créé l'accordéon comme ceci:ExtJS: Désactiver l'animation d'accordéon

layout:'accordion', 
layoutConfig:{ 
      animate:true 
} 

puis-je ajouter des éléments par méthode add(), puis re-rendu avec doLayout() et définissez le activeItem:

navigation_panel.getComponent(1).expand(false); 

J'appelle la méthode expand() avec le paramètre false, mais il anime toujours la transition, donc il prend le réglage de la disposition principale et ignore que j'ai envoyé à expand(). Comment résoudre ce problème?

Répondre

5

Deux choses se produisent lorsque vous développez un élément dans un panneau selon: 1. L'ancien élément actif est réduit 2. Le nouvel élément actif est étendu

L'effondrement de l'ancien élément actif est géré par la mise en page d'accordéon et se produit pendant l'événement "beforeexpand". En regardant le code source, je vois que la disposition de l'accordéon appelle var ai = this.activeItem; Par conséquent, l'animation de l'effondrement de l'ancien élément actif est entièrement déterminée par la propriété "animate" de la mise en page d'accordéon. Le drapeau d'animation que vous transmettez est ignoré à ces fins. Je suppose que si vous regardez de près, vous verrez que votre effondrement est animé alors que l'expansion ne l'est pas. Parce que le drapeau animé est transmis explicitement, je ne vois pas de moyen standard, pris en charge pour remplacer ce comportement pour une seule opération.

Dans la version 3.0+, vous pouvez appeler la méthode documentée getLayout() avant ou après le rendu pour obtenir une référence à un objet de mise en page d'un conteneur. Vous pouvez simplement définir la propriété animate de l'objet de mise en page sur false pendant que vous manipulez le panneau, puis réglez-le lorsque vous avez terminé. Ceci n'est pas documenté pour fonctionner mais probablement basé sur la source.

+0

je vous remercie pour votre idée. Cela fonctionne;) – Skay

+3

'animate: false' est la façon acceptée de désactiver les animations –