Руководство по actionscript. часть 6, стр. 039
Листинг 28.10. Периодическая проверка существования загруженного объекта
package { import flash. display.*; import flash. events.*; import flash. net.*; import flash. utils.*;
public class Main extends Sprite { private var loader:Loader;
public function Main( ) { // Загружаем файл Module. swf loader = new Loader( );
1 oader. contentLoaderlnfo. addEventLi stener(Event. INIT.
initListener);
1oader.1oad(new URLRequest(«Module. swf»));
}
private function initListener (e:Event):void { // Загруженный SWF-файл был проинициализирован, // поэтому начинаем периодическую проверку существования // объекта TextField. var timer:Timer = new TimerdOO, 0); timer. addEventListener(TimerEvent. TIMER, timerListener); timer. start( );
}
private function timerListener (e:TimerEvent):void { // Проверяем, был ли создан объект TextField // загруженного SWF-файла if (loader. content. hasOwnPropertyC’t»)) {
// Объект TextField уже существует, поэтому мы можем благополучно
// обратиться к нему
trace(Object(loader. content).t. text);
// Останавливаем таймер е. target. stop( );
}
}
}
}
Теперь снова предположим, что приложение Main, swf загружает приложение Module. swf и желает обратиться к объекту t. На этот раз, однако, основной класс Module приложения Module. swf рассылает пользовательское событие Module. ASSETS_READY, когда объект t становится доступным. Приложение Main. swf регистрирует приемник для события Module. ASSETS_READY и обращается к объекту t, когда возникает данное событие. Рассмотрим код для класса Module, в котором определена константа события:
package { import flash. display. MovieClip;
class Module extends MovieClip { // Определяем константу события
public static const ASSETS_READY:String = «ASSETS_READY»;
Теперь рассмотрим сценарий, размещаемый во втором кадре основной временной шкалы приложения Module. swf, который осуществляет диспетчеризацию события, обозначающего доступность объекта t:
stop( );
var t:TextF1eld = new TextField( );
t. text = «hello»;
addChild(t);
di spatchEvent(new Event(Module. ASSETS_READY));
Наконец, в листинге 28.11 представлен код для основного класса приложения Main. swf. Предполагается, что на этапе компиляции компилятор языка ActionScript не имеет доступа к определениям классов загружаемого SWF-файла. В итоге этот код ссылается на событие Module. ASSETS_READY по его строковому имени «ASSETS_READY»:
1oader. content. addEventListener(«ASSETS_READY», assetsReadyListener);
Подобным образом в данном коде значение переменной loader. content приводится к типу Ob j ect, поэтому проверка типов откладывается до этапа выполнения:
Object(1oader. content).t. text
Полную информацию о проверке типов загружаемых элементов можно найти в разд. «Проверка типов на этапе компиляции для динамически загружаемых элементов».