Руководство по actionscript. часть 3, стр. 144
Листинг 20.6. Демонстрация событий контейнера
package { import flash. display.*; лщугЪ f \ ash. ем ents.*;
public class ContainmentEventDemo extends Sprite { public function ContainmentEventDemo ( ) { // Создаем объекты Sprite
var container:Sprite = new Sprite( ); var child:Sprite = new Sprite( ); var grandchild:Sprite = new Sprite( );
// Приступаем к приему событий Event. ADDED и Event. REMOVED contai ner. addEventLi stener(Event. ADDED, addedLi stener); contai ner. addEventLi stener(Event. REMOVED, removedLi stener);
// Добавляем объект child в объект container container. addChild(child); // Вызывает метод addedListener( )
// на фазе всплытия
// Добавляем объект grandchild в объект child child. addChild(grandchild); // Вызывает метод addedListener( )
// на фазе всплытия
// Добавляем объект container в экземпляр класса-Stage stage. addChild(container); // Вызывает метод addedListener( )
// на фазе получения
// Удаляем объект grandchild из объекта child child. removeChild(grandchiId) // Вызывает метод removedListener( )
// на фазе всплытия
// Удаляем объект container из экземпляра класса Stage stage. removeChild(container) // Вызывает метод removedListener( )
// на фазе получения
}
// Обрабатывает события Event. ADDED
private function addedListener (e:Event):void {
if (e. eventPhase!= EventPhase. AT_TARGET) { traceCcontainer has a new descendant: » + e. target);
} else {
trace(«container was added to a new parent: » + DisplayObject(e. target).parent);
}
}
// Обрабатывает события Event. REMOVED
private function removedListener (e:Event):void {
if (e. eventPhase 1= EventPhase. ATTARGET) { traceCa descendant was removed from container: » + e. target);
} else {
trace(«container was removed from its parent: » + DisplayObject(e. target).parent);
}
}
}
// В результате выполнения приложения ContainmentEventDemo // выводятся следующие строки:
container has a new descendant: [object Sprite] container has a new descendant: [object Sprite] container was added to a new parent: [object Stage] a descendant was removed from container: [object Sprite] container was removed from its parent: [object Stage]
Реальный пример использования событий контейнера
Теперь, когда известно, как работают события Event. ADDED и Event. REMOVED в теории, рассмотрим, как можно использовать их в реальном приложении. Предположим, что мы создаем класс IconPanel, который управляет визуальным расположением графических значков. Класс IconPanel используется в качестве одной из частей большего оконного компонента в интерфейсе, основанном на оконном представлении. Всякий раз при добавлении нового или удалении существующего значка из объекта IconPanel этот объект исполняет алгоритм по размещению значков. Чтобы определить моменты добавления и удаления дочерних значков, объект IconPanel регистрирует приемники для событий Event. ADDED и Event. REMOVED.