2009-11-12 68 views
2

我想將一個eventListener放在ArrayCollection的length屬性上,但我不知道如何去做。在AS3/Flex中觀察ArrayCollection的length屬性

我想這樣做,因爲我只想要在特定數量的事物在某個ArrayCollection中時執行代碼。我希望Flex等待在下一個對象上執行此代碼,直到該長度屬性回落到可接受的水平。我認爲我應該通過事件來做到這一點,而不是一個永久噴出NOOP的while循環(我也不知道該怎麼做)。

請幫忙,並提前致謝。 SO迄今爲止幫助很大。

回答

0

您可以添加一個'collectionChange'事件監聽器,並檢查自上一個事件以來ArrayCollection.length是否已經改變。 (您需要保留ArrayCollection的長度的靜態或實例副本,以便進行比較。)

另一個想法是創建自己的lengthChangedEvent,擴展ArrayCollection,重寫length屬性並查找,然後調用任何lengthChangedEvent偵聽器在二傳手中。然後,使用擴展ArrayCollection代替基類,無論您需要監聽事件。這將不起作用,因爲length屬性是隻讀的,沒有setter可以重寫。您將不得不重寫每個可能會添加或從ArrayCollection中刪除項目的方法,並在每種情況下測試/調用您的lengthChangedEvent偵聽器。

3

ArrayCollection將在其項目發生更改時發送「collectionChange」事件。因此,您可以收聽該事件,並在每次分派事件時檢查「長度」屬性。或者,您也可以通過BindingUtils.bindSetter()綁定到length屬性。