Проблема здесь в том, что вы создаете объект MediaGallery, который выполняет синтаксический анализ xml, а затем проверяет размер проанализированных данных, прежде чем они будут готовы. Я бы порекомендовал использовать функцию обратного вызова. Для этого вам нужно только изменить конструктор MediaGallery, как показано на рисунке.
private var callbackObj:Object;
public function MediaGallery(xmlSource:String, callback:Object)
{
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest(xmlSource));
loader.addEventListener(Event.COMPLETE, loadGalleries);
this.callbackObj = callback;
}
Теперь вам нужен метод обновления в классе, который создает экземпляр MediaGallery, например:
public function update():void {
trace(mg.Albums.length);
}
Наконец, все, что вам нужно сделать, это добавить вызов метода update в ваш обработчик Event.Complete. (Измените его следующим образом).
public function loadGalleries(e:Event):void
{
var xmlData:XML = new XML(e.target.data);
var album;
for each (album in xmlData.albums)
{
Albums.push(new MediaAlbum(album.attribute("name"), album.photos));
}
this.callbackObj.update();
}
Это должно решить вашу проблему :-D
Просто помните, что когда вы имеете дело с URLLoader, вам нужно написать свой код, чтобы он управлялся событиями, или вы будете пытаться использовать данные, которые еще не были получены.
Удачи