我有一個自定義Flex容器組件在AS3中編寫,名爲StatisticsContainer。在應用程序中使用時,它包含名爲統計框的各種自定義標籤組件。所以可能有一個StatisticsContainer包含3個StatisticsBox:「averageAge」,「divorceRate」和「infantMortalityRate」。元素應該如何在Flex中沒有硬編碼的情況下在樹的更深處獲取引用?
StatisticsContainer需要能夠引用和操作所有統計框。但是我不想將這些引用硬編碼到StatisticsContainer中,因爲會有各種不同的StatsContainer實例,其中包含不同的StatisticsBox。
那麼我該如何動態地給StatisticsContainer一個包含所有統計框的ArrayCollection?
到目前爲止,我開始在StatisticsContainer的creationComplete這樣的功能:
for (var i:int = 0; i < numElements; i++) {
if (getElementAt(i) is StatisticsBox) {
statisticsBoxes.addItem(getElementAt(i));
}
}
這隻有在StatisticsBoxes是直接subchildren。無論如何,這感覺有點哈克。
然後我試着在StatisticsContainer中偵聽CreationComplete事件。但是這些不會從StatisticsBox到達,因爲它們不會冒泡。
最後,我創建了我自己的事件,我用StatsComplete中的creationComplete來觸發它,並在StatisticsContainer中偵聽它。這是有效的,但這真的是最好的方法嗎?