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 出现、消失,然后 flex 应用程序将滞后,最终显示更新的 TileList。

有任何想法吗?谢谢!

4

1 回答 1

0

问题是,它不执行 .visible=true,运行 for each 循环并等待它完成,然后转到 .visible=false,但实际上运行 .visible,对于每个 .visible .

如果您想确保您的 for each 在下一个代码行继续之前结束,您需要将其余代码移动到另一个函数,该函数将由您将制作的一些自定义事件调用。

现在,在你的 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 }
}

所以现在你将拥有你的 for each 和一些自定义事件调度程序,它将调用另一个包含你的其余代码的函数,包括 .visable=false.,确保你的其余代码将只在 for each 之后运行结束。

我知道这很丑,但这是我能想到的确保它有效的唯一方法。

于 2010-05-14T09:56:33.600 回答