2014-04-28 41 views
0

我有一个Spark列表,我在其中手动添加自定义组件(没有项目渲染器)。除了当我在列表中添加数百个项目时(基于几次计算),一切正常,呈现时间增加到几秒钟。Flex Spark列表项呈现延迟刷新

我的问题是:

  1. 是否柔性自动延时被添加到列表中的组件再现?
  2. 如果不是那么,我怎么能告诉火花列表,只有一旦一切都被添加渲染组件。

我希望我所问的是有道理的。我非常确定渲染时间正在增加,因为我在自定义组件中有相当多的组件。我只需要简单回答我的问题。

回答

1

一件事要知道的是,

ActionScript 3在基于偶数驱动的Flash播放器上运行。这意味着如果您在阻塞中运行一段代码,则在代码结束之前不会执行其他任何操作,包括渲染。

这种设计有时会导致一些问题:如果开发人员在一个阻塞函数中添加了太多工作,播放器就会立即冻结并且无响应。 (如果代码是一个无限循环,它会停止,直到玩家检测并抛出ScriptTimeoutError,或者可能会永远丢失。)

但是,对于您的问题,是的,任何事情都会延迟,直到添加作业完成。 Flex组件基本上不会自动分割作业。

1

Flex组件根据Flex的生命周期呈现在列表中:http://help.adobe.com/en_US/flex/using/WS460ee381960520ad-2811830c121e9107ecb-7fff.html

有两个原因您的列表可能会运行缓慢,您的组件可能不会从Flex的生命周期正确,第二是因为虚拟布局未在列表中启用。

首先在硬盘之一:

你的第一步应该是,以确保您按照您的自定义组件的正确阶段为commitProperties()measure()updateDisplayList(unscaledWidth:Number, unscaledHeight:Number)

只要你没有在你的UIComponent子类或LayoutManager上调用任何名为validateNow()的方法,那么你的组件应该很好。

第二个可能是您的列表布局不使用虚拟布局。这在Spark List组件中是默认启用的,但是如果您覆盖了布局,则应确保在您使用的任何布局上useVirtualLayout设置为true。

这是属性来启用它: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/List.html#useVirtualLayout

这是什么,它对加快火花DATAGROUP组件渲染许多项目(该清单): http://help.adobe.com/en_US/flex/using/WSc2368ca491e3ff92-1483ec4a12136246e76-8000.html#WS685c4ccbb85d340c6617851e121d4b8abae-8000