2010-10-06 73 views
0

您可以很容易地(通過itemRenderer或itemRendererFunction)掛鉤創建Flex 4項目渲染器,從而允許您從自定義對象池中提取渲染器,但是您將如何把那些渲染器放回池中?如何爲Flex數據/項目渲染器實現對象池

我明白,佈局虛擬化做了一種形式的對象池,但我想要一種方式來接入。例如,當一個itemRendererFunction被分配給一個帶有虛擬化佈局的數據組時,項目渲染器的構造確實被推遲了,但是這些實例沒有被重用 - 如果可能的話,我希望能夠介入。

但即使在普通虛擬化渲染器(實例重新循環)的情況下,仍然可以手動管理池。例如,可以在數據組之間共享池,以減少填充每個組所需的初始緩衝區。

有沒有什麼辦法知道Flex什麼時候放棄項目渲染器實例?我有一種下沉的感覺,那就是沒有可靠的方法來說明 - 儘管也許應該有。

或者,有沒有可以工作的瘋狂黑客(比如保留池中的所有渲染器並測試其舞臺屬性以確定可用性)?

+0

這是一個粗略的實現,伎倆:https://github.com/darscan/ robotlegs-extensions-Oil/blob/master/src/org/robotlegs/oil/flex/PooledRendererFactory.as – 2011-01-07 17:47:09

回答

1

看起來像SkinnableDataContainer是開始的地方。文檔建議updateRenderer是需要查看的地方,但代碼並不多。

它還調度RendererExistenceEvent.RENDERER_ADD和RendererExistenceEvent.RENDERER_REMOVE事件,如果您想要捕捉正在發生的事情,可能值得傾聽。

+0

太棒了,讓我走上了正軌。 RendererExistenceEvent.RENDERER_ADD/REMOVE事件從DataGroup派發。 – 2010-10-07 17:35:12

0

這是一個非常有趣的問題,RENDERER_REMOVE看起來像是在使用後將實例存儲在池中的好方法。但我不明白如何itemRenderer或itemRendererFunction可用於提供INSTANCES(而不是類)到一個數據組...

+1

itemRenderer和itemRendererFunction都可以用來通過使用mx.core.IFactory來提供實例 – 2011-01-07 17:45:17

相關問題