Если вы напрямую обращаетесь к родительским классам из дочерних объектов, вы создаете сильную связь - это именно то, что вам не нужно в хорошо построенной системе. Лучше не обращаться непосредственно к объекту приложения, но использовать прослушиватели событий и настраиваемые события для продвижения изменений, например навигация.
Вот пример. Сначала создайте пользовательское событие:
public class MyCustomEvent extends Event {
public static const MENU_ITEM_SELECTED : String = "MENU_ITEM_SELECTED";
public var selectedItem:String;
}
Затем пусть навигация отправит его при нажатии кнопки:
public class Navigation extends Sprite () {
// ...
private function onButtonClicked(ev:Event) : void {
ev.stopPropagation();
var custEvent:MyCustomEvent = new MyCustomEvent(MyCustomEvent.MENU_ITEM_SELECTED);
custEvent.selectedItem = ev.target.name;
this.dispatchEvent (custEvent);
}
// ...
}
Наконец, позвольте приложению обработать пользовательское событие и вызвать другой экран:
public class App {
// ...
public function createNavigation () : void {
navigation = new Navigation ();
navigation.addEventListener (MyCustomEvent.MENU_ITEM_SELECTED, onMenuItemSelected);
// ... more stuff happening
}
// ...
private function onMenuItemSelected (ev:MyCustomEvent) : void {
switchToScreen (ev.selectedItem);
}
private function switchToScreen (name:String) : void {
// choose screen by name, etc.
}
}
Для всего этого ни экран, ни навигация не должны ничего знать о других задействованных объектах, поэтому вы можете легко заменить каждый из них, не нарушая остальную часть системы.