2014-04-28 38 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