2010-10-18 24 views
1

在DataGroup中使用自定義的itemrenderer時,如何區分數據提供程序更新和正在回收的itemrender?我如何知道何時回收sparkrenrenren與數據更新?

我已經覆蓋了自定義項目渲染器的設置數據函數,但是我發現在對用作DataProvider的ArrayCollection進行更改時,某些項目渲染器未分配到與更新前相同的對象。這使我幾乎不可能區分數據更新和正在回收的項目渲染器。此外,數據似乎永遠不會被設置爲值= null,所以似乎也是如此。

任何想法?

回答

1

我不確定你的要求。

渲染器回收是更改渲染器數據的過程,通常是在您滾動瀏覽基於列表的類時。這是出於性能原因,因此只有在scree上顯示的項目纔會被渲染,而不是在屏幕外顯示的項目。渲染器回收用於模擬實際上在滾動列表時進行滾動。

當您替換dataProvider時,它會更新所有渲染器。更改dataProvider時,它可能會更新某些渲染器,具體取決於更改內容。我已經通過了dataGroup代碼,所以我不確定它的更新是什麼,但Halo listBased類實現了一個collectionChange事件處理程序來處理這些更改。我會懷疑DataGroup做了類似的事情。

爲什麼你需要知道渲染器數據發生變化的原因?渲染器應該只關心它已被更改。

+0

+1最後一行! – Amarghosh 2010-10-19 03:53:08

+0

我有一個windowshade組件作爲項目渲染器的一部分。如果由於arraycollection中的數據發生更改而導致數據更新,我想打開該窗口。如果由於組件的回收而改變(敞開的陰影從頂部滾動到底部),那麼我希望陰影在關閉時出現。 – rosswil 2010-10-19 05:53:11

+0

@Amarghosh感謝噶瑪。 @rosswil你可能可以通過監聽父類的collectionChange事件來解決問題,但是它會有點混亂並且會破壞封裝。 – JeffryHouser 2010-10-19 12:15:56

0

有一個dataChange事件在它們是對{data}提供者的更改時會冒出來。

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       autoDrawBackground="true" width="142" height="22" dataChange="WHATEVERYOUWANT" 
+0

但是當數據在itemrender中被更改時,由於被回收,此事件也會被觸發。 – rosswil 2010-10-20 15:03:59

+0

另一種選擇是,如果你只希望在組件/渲染器開始時發生這種情況,可以使用:creationComplete – 2010-10-21 05:59:37

+0

另一種選擇是,如果你只希望在組件的渲染開始時發生這種情況/ renderer是使用:creationComplete 我有一個複雜的一套多功能,我做了一個itemRenderer的控件,creationComplete是我用作compramise的,因爲1)它只發生一次。 2)它發生在數據事件之後,3)控件準備好接收更改,我發現有時dropdownlists在數據更改啓動時沒有準備好。 – 2010-10-21 06:05:57

相關問題