Измените
this.addEventListener( MyEvent.REQUEST_FORWARD, function( e : MyEvent ):void{ Alert.show( ":P" ) } );
на
xWin.addEventListener( MyEvent.REQUEST_FORWARD, function( e : MyEvent ):void{ Alert.show( ":P" ) } );
Или, может быть, вы используете всплывающее окно событий?
Я не знаю подробностей о вашем коде и вижуэто очень проблематично, но этот код работает нормально:
<?xml version="1.0" encoding="utf-8"?>
<s:Application creationComplete="init()" xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.PopUpManager;
protected function init():void
{
PopUpManager.addPopUp(xWin, this);
systemManager.addEventListener(MyEvent.REQUEST_FORWARD, function(e:MyEvent):void
{
Alert.show(":P")
});
}
]]>
</fx:Script>
<fx:Declarations>
<s:TitleWindow id="xWin">
<s:Button click="xWin.dispatchEvent(new MyEvent(MyEvent.REQUEST_FORWARD))" horizontalCenter="0"
verticalCenter="0" />
</s:TitleWindow>
</fx:Declarations>
</s:Application>
Где MyEvent
:
package
{
import flash.events.Event;
public class MyEvent extends Event
{
public static const REQUEST_FORWARD:String = "requestForward";
public function MyEvent(type:String)
{
super(type, true, false);
}
}
}
Но что касается меня лично, я рекомендую изменить весь ваш код:)
Прежде всего, я настоятельно рекомендую вам извлечь ваше окно в отдельный компонент (вы должны делать это все время и использовать встроенные компоненты только для создания прототипов):
<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Metadata>
[Event(name="requestForward", type="MyEvent")]
</fx:Metadata>
<s:Button click="dispatchEvent(new MyEvent(MyEvent.REQUEST_FORWARD))" horizontalCenter="0"
verticalCenter="0" />
</s:TitleWindow>
Во-вторых, небез необходимости используйте всплывающие события, особенно внешние компоненты:
package
{
import flash.events.Event;
public class MyEvent extends Event
{
public static const REQUEST_FORWARD:String = "requestForward";
public function MyEvent(type:String)
{
super(type);
}
}
}
В-третьих, старайтесь не использовать внутренние функции и создавайте отдельные методы.Это более читабельно и отписаться легче.Итак, наше окончательное приложение:
<?xml version="1.0" encoding="utf-8"?>
<s:Application creationComplete="init()" xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.PopUpManager;
protected function init():void
{
var win:MyWindow = MyWindow(PopUpManager.createPopUp(this, MyWindow));
win.addEventListener(MyEvent.REQUEST_FORWARD, win_requestForwardHandler);
}
private function win_requestForwardHandler(event:MyEvent):void
{
Alert.show(":P");
var win:MyWindow = MyWindow(event.currentTarget);
win.removeEventListener(MyEvent.REQUEST_FORWARD, win_requestForwardHandler);
}
]]>
</fx:Script>
</s:Application>