Насколько я могу судить, эта тема не слишком применима к вам, если вы на самом деле не загружаете SWF во время выполнения и не пытаетесь прослушивать события между ними.
Я бы также посоветовал не использовать иерархию в списке отображения для сбора ссылок, если только сама иерархия действительно не важна. Например, может быть, это меню удаляет себя из родительского контейнера при закрытии или ему нужно добавить displayObject в тот же контейнер, в котором он включен, и ему все равно, что это за контейнер. Использование иерархии вынуждает вас поддерживать эту иерархию для ссылок, что иногда может затруднить внесение изменений в растущем приложении.
Вот пример того, что вы можете искать, который не использует список отображения для сбора ссылок:
public class Main extends Sprite
{
private var menu:SubMenu;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
menu = new SubMenu(this);
addChild(menu) //This is not neccessary for them to communicate
dispatchEvent(new Event(Event.CHANGE));
}
}
public class SubMenu extends Sprite
{
private var mainMenu:IEventDispatcher; //This could be typed as Main instead of IEventDispatcher if needed.
//Sprites are however IEventDispatchers
public function SubMenu(mainMenu:IEventDispatcher)
{
this.mainMenu = mainMenu;
mainMenu.addEventListener(Event.CHANGE, switchItem, false, 0, true);
}
private function switchItem(event:Event):void
{
trace("Parent_Changed")
}
}
Вот пример использования иерархии списка отображения (я бы не советовал):
public class Main extends Sprite
{
private var menu:SubMenu;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
menu = new SubMenu();
addChild(menu) //This is neccessary, and the menu cannot be added to a different parent
dispatchEvent(new Event(Event.CHANGE));
}
}
public class SubMenu extends Sprite
{
public function SubMenu()
{
//Neccessary because submenu will not have a parent when its first instantiated.
//When its on the stage then you can have it grab its parent and add a listener.
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//Parents available
parent.addEventListener(Event.CHANGE, switchItem, false, 0, true);
}
private function switchItem(event:Event):void
{
trace("Parent_Changed")
}
}