読者です 読者をやめる 読者になる 読者になる

まめ畑

ゆるゆると書いていきます

Flexで常にTextAreaの最終行を表示する時のメモ

Flex ActionScript

Flexでアプリを作っていてログなどをTextAreaに表示する際、常に最後に追加された文字を表示させようとして少し困ったのでメモ。


最初、このような感じでログを追加する関数を書いた一番下の文字の1つ前辺りに設定されて困った

//logはTextAreaのid
private function addStatusLog(message:String):void{
   log.text += message + "\n";
   log.verticalScrollPosition = log.maxVerticalScrollPosition;
}


どうやら、設定した直後では上手く値が取得出来ない様で次の描画のタイミングで取得しないといけない模様。
なので、以下の様に修正して解決。

private function addStatusLog(message:String):void{
   log.text += message + "\n";
   callLater(function():void{
             log.verticalScrollPosition = log.maxVerticalScrollPosition;
   });
}


callLaterで次の描画単位まで実行を遅らせて、所望の順序で実行させる事が多いようです。
初期化後や、何かを追加した後に処理を行いたい場合はcallLaterを使用して処理の順番を指定するようです。
描画されるまで値が正常に取得出来ないという考え方でいいのかな。