1

ArrayCollection にバインドされた mx:TileList があります。ArracyCollection を変更する前に「読み込み中...」メッセージを表示するコードと、その後の読み込みメッセージを非表示にするコードがあります。

小さなデータ セットの場合は、問題なく動作します。しかし、配列サイズが約 50 ~ 以上の場合、TileList が新しいデータのレンダリングを完了する前に flex が読み込みメッセージを非表示にし、奇数秒間空白の画面が表示されることに気付きました。

TileList の再レンダリングが終了した後に呼び出される、リッスンできるイベントはありますか? コードは次のようになります。

loading_message.visible = true;
for each (var x:Object in new_data) {
    tile_list_data.append(x); // bound to my_tile_list component
}
my_tile_list.validateNow();
loading_message.visible = false;

この例では、loading_message が表示されてから消えてから、更新された TileList が最終的に明らかになる前にフレックス アプリが遅延します。

何か案は?ありがとう!

4

1 に答える 1

0

問題は、.visible = trueを実行せず、for eachループを実行し、実行が完了するまで待機してから.visible = falseに移動しますが、実際には.visible、for each、.visibleを実行することです。 。

次のコード行が続く前にforeachが終了することを確認したい場合は、残りのコードを別の関数に移動する必要があります。この関数は、作成するカスタムイベントによって呼び出されます。

ここで、for each内に、それが完了したかどうかをチェックするコードを追加してから、カスタムイベントディスパッチャーを呼び出す必要があります。

var n:Number = 0;
for each (var x:Object in new_data) {
    ++n;
    tile_list_data.append(x); // bound to my_tile_list component
    if (new_data.length <= n) { call the event }
}

これで、.visable = false。を含む残りのコードを含む別の関数を呼び出すカスタムイベントディスパッチャーを使用して、for eachを作成し、残りのコードがforeachの後にのみ実行されるようにします。終了します。

私はそれが醜いことを知っています、しかしそれはそれがうまくいくことを確認するために私が考えることができる唯一の方法です。

于 2010-05-14T09:56:33.600 に答える