Ну, например, такая распространенная схема - RandomItem в обработчике окончания загрузки xml ПОСЛЕ присвоения параметрам значений должен отправить событие (мол все готово, COMPLETE). Но для этого необходимо еще кое что сделать - вынести начало загрузки из конструктора в отдельный публичный метод (доп. load), иначе Вы не сможете подписаться на событие COMPLETE от RandomItem
до старта загрузки. Т.е. работа с RandomItem должна получиться похожей на работу с классом XML на этапе загрузки -

Код AS3:
public class Main extends MovieClip {
public function Main() {
var _randomItem:RandomItem = new RandomItem();
_randomItem.addEventListener(RandomItem.COMPLETE, onRandomItemComplete);
_randomItem.load("Items.xml");
}
public function onRandomItemComplete(event:Event):void {
var _randomItem:RandomItem = event.target as RandomItem;
trace ( _randomItem.getFlashName() );
trace ( _randomItem.getPosition() ); // возвращает null?
trace ( _randomItem.getTitle() ); // возвращает null?
trace ( _randomItem.getDescription() ); // возвращает null?
}
}

Код AS3:
internal class RandomItem {
public static const COMPLETE:String = "random_item_complete";
....
public function RandomItem() {
....
// НЕ создаем объект XML из файла Items.xml
// loadXML();
....
}
public function load(url:String):void {
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener(Event.COMPLETE, completeLoaderListener);
loader.load( new URLRequest( url ) );
}
private function completeLoaderListener(event:Event):void {
....
_getPosition = instantItem.@position;
_getTitle = instantItem.TITLE;
_getDescription = instantItem.DESCRIPTION;
....
dispatchEvent( new Event(RandomItem.COMPLETE) );
}
}
Как-то так.
Добавлено через 4 минуты
Да, и надо RandomItem расширить от EventDispatcher конечно и импорты я опустил.