Enumerate children. Как "пробежаться" по детям моего компонента?
Необходимо по окончании создания компонента пробежаться по его дочерним элементам с прикладной целью.
Ни в childrenCreated(), ни в creationComplete они недоступны ( numChildren == 0). Та же картина в событии Added, а если отнаследоваться от Container, то событие childAdd не вызывается.
Компонент наследует UIComponent (Container, VBox etc - проблему не решают). Если рядом с "невизуальным" HTTPService бросить кнопку - всё равно, она недоступна ( getChildAt()).
Беда. Вообще, между нами, что-то на флексе та-а-ак туго всё даётся… Удивительно. :(
Код:
package com.mirabile.business {
import com.adobe.cairngorm.business.ServiceLocator;
import flash.display.DisplayObject;
import flash.events.Event;
import mx.containers.Box;
import mx.core.Container;
import mx.core.IChildList;
import mx.core.UIComponent;
import mx.events.ChildExistenceChangedEvent;
import mx.events.FlexEvent;
import mx.rpc.AbstractService;
import mx.rpc.http.mxml.HTTPService;
public class ServiceAddon extends UIComponent // или Container или VBox или whatever else
{
private var locator: ServiceLocator = ServiceLocator.getInstance();
public function ServiceAddon(){
super();
addEventListener(Event.ADDED, created);
addEventListener(mx.events.ChildExistenceChangedEvent.CHILD_ADD,
childAdded); // НЕ СРАБАТЫВАЕТ
}
override protected function childrenCreated():void{
super.childrenCreated();
addServices();
}
private function childAdded(event: ChildExistenceChangedEvent): void{
checkChild(event.relatedObject);
}
private function created(event: Event): void{
addServices();
}
private function addServices(): void{
var count: int = numChildren;
for (var i: int = 0; i < count; i++){
var obj: DisplayObject = getChildAt(i);
checkChild(obj);
}
}
private function checkChild(obj: *): void{
if (obj is HTTPService){
locator[obj["id"]] = obj;
} else if(obj is AbstractService){
locator[AbstractService(obj).id] = obj;
}
}
}
}
Код:
<?xml version="1.0" encoding="utf-8"?>
<mirabileBusiness:ServiceAddon
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:mirabileBusiness="com.mirabile.business.*"
xmlns:cairngorm="http://www.adobe.com/2006/cairngorm">
<mx:HTTPService id="galleryService"
showBusyCursor="true"
method="GET" resultFormat="xml"
contentType="application/xml"
requestTimeout="15"
url="assets/data/dumbxml.php"
result="event.token.resultHandler(event);"
fault="event.token.faultHandler(event);" />
</mirabileBusiness:ServiceAddon>
|