Показать сообщение отдельно
Старый 22.06.2010, 22:07
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну, например, такая распространенная схема - 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 конечно и импорты я опустил.
__________________
Reality.getBounds(this);