Компоненты Flex создаются ленивым образом. Это означает, что любые подкомпоненты не будут созданы, пока они действительно не потребуются . И пока компонент не был добавлен в список отображения, вы можете быть уверены, что его подкомпоненты не понадобятся (вы можете использовать Google «Жизненный цикл компонента Flex», если хотите узнать о нем больше).
Более конкретно для вашего случая
Вы пытаетесь получить доступ к 'iconDisplay' до того, как CalloutButton был добавлен в список отображения, поэтому свойство 'iconDisplay' имеет значение 'null'.
Решение
Я не совсем уверен, почему вы хотите сделать это в ActionScript, но в любом случае вот исправление: вы должны слушать FlexEvent.CREATION_COMPLETE
. Когда это событие вызывается CalloutButton, вы будете уверены, что его подкомпонент 'iconDisplay' больше не является 'нулевым'.
var editCalloutBtn:CalloutButton = new CalloutButton();
editCalloutBtn.addEventListener(
FlexEvent.CREATION_COMPLETE, onCalloutButtonReady);
callout_group.addElement(editCalloutBtn);
private function onCalloutButtonReady(event:FlexEvent):void {
//remove the event listener: we no longer need it
editCalloutBtn.removeEventListener(
FlexEvent.CREATION_COMPLETE, onCalloutButtonReady);
//no longer null
trace(editCalloutBtn.iconDisplay);
}
Могут быть исключения из этого (например, при использовании состояний или скина, у которого нет элемента 'iconDisplay'), но я не буду вас этим беспокоить, потому что они не должны происходить здесь .