Существует несколько подходов к этой проблеме.Самым простым (и наименее объектно-ориентированным) является то, чтобы A знал о B или наоборот.В этом случае вы можете просто добавить слушателя.В B вы можете сказать a.nextStepButton.addEventListener (MouseEvent.CLICK, myHandler), или в A вы можете сделать это.nextStepButton.addEventListener (MouseEvent.CLICK, b.myHandler).(Когда создается один компонент, вам нужно установить ссылку на него на другом компоненте.)
Одним из способов лучше было бы отправлять пользовательское событие, которое всплывает, при этом один из компонентов все еще знает о другом,В B: a.addEventListener (CustomNavigationEvent.NEXT_CLICK, myHandler) или в A: b.addEventListener (CustomNavigationEvent.NEXT_CLICK, myHandler).
Если продолжить, вы можете просто позволить событию всплыть наверх (SystemManager) и добавьте слушателя в SystemManager.Таким образом, B вообще не знает об A.В B: this.systemManager.addEventListener (CustomNavigationEvent.NEXT_CLICK, myHandler).
Если пойти еще дальше, вы можете реализовать собственную версию транслятора событий, которая является лишь третьим объектом, доступным для любого компонента.обычно реализуется как одноэлементный, который принимает регистрации слушателей и принимает отправки событий, а затем передает это событие зарегистрированным слушателям.
Надеюсь, что это помогает.
РЕДАКТИРОВАТЬ: Вот некоторый код для того, чтобы сделать это первымпуть:
В A.mxml:
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="onCreationComplete(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
public var b:B;
private function onCreationComplete(e:FlexEvent):void {
// Note that you have to have a public onClick handler in B
this.myButton.addEventListener(MouseEvent.CLICK, b.onClick);
}
]]>
</fx:Script>
<s:Button id="myButton"/>
</s:Group>
Вам нужно сделать так, чтобы A знал о B в контейнере, который объявляет экземпляры как A, так и B:
MXML:
<mypackage:A id="aComponent" b="bComponent"/>
<mypackage:B id="bComponent"/>
Эквивалент ActionScript:
var aComponent:A = new A();
var bComponent:B = new B();
aComponent.b = bComponent;