Je crée une fenêtre de chat, un peu comme cet exempleComment puis-je obtenir un conteneur Flex pour faire défiler jusqu'à la dernière position?
http://demo.seanhess.net/oneshots/scrolling.swf
Chaque fois qu'un chat en est ajouté, je le veux montrer complètement le dernier message. J'utilise maxVerticalScrollPosition pour définir la position de défilement sur la liste, mais c'est toujours faux (voir l'exemple). Il sous-estime une rangée ou plus. J'ai essayé ceci avec un récipient régulier et il fait la même chose. Si je fais maxVerticalScrollPosition + 1, ça fonctionne en quelque sorte, mais si le dernier message est particulièrement long, il sera coupé (ne montre que le haut).
Comment puis-je l'obtenir pour faire défiler vers le réelle en bas du conteneur ??
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
protected function addChat():void
{
collection.addItem(new String(input.text));
list.verticalScrollPosition = list.maxVerticalScrollPosition;
input.text = "";
}
]]>
</mx:Script>
<mx:Panel width="400" height="290">
<mx:List id="list" width="100%" height="100%" variableRowHeight="true">
<mx:dataProvider>
<mx:ArrayCollection id="collection"/>
</mx:dataProvider>
<mx:itemRenderer>
<mx:Component>
<mx:Text text="{data}"/>
</mx:Component>
</mx:itemRenderer>
</mx:List>
<mx:HBox width="100%">
<mx:TextInput id="input" width="100%" enter="addChat()"/>
<mx:Button label="add" click="addChat()"/>
</mx:HBox>
</mx:Panel>
</mx:Application>
J'utilise générallement validateNow() sans problèmes de performances dans les applications non triviales. Si elle se déclenche dans une énorme boucle, je l'éviterais, mais dans ce scénario, validateNow() serait recommandé. Je le préfère à callLater() parce que vous avez le contrôle et que vous savez que l'action se déroule maintenant. –