イベントがディスパッチされてトラウマを抱えていますが、メインのアプリでは検出できません。コードの例をノックアップして、冗長なものを削除したので、少し変わったように見えます!
ボタンが1つあるキャンバスを持つメインアプリ(Air)があります。この単一のボタンは、データグリッドを含むポップアップ タイトル ウィンドウを開きます。データグリッドをクリックすると、非常に単純なカスタム イベントがディスパッチされます。これは最下位レベルで聞こえますが、キャンバスやメイン アプリは呼び出されません。上位レベルでリスナーを定義する方法だと思いますが、それは本当に私を怒らせています! 以下のコード:
mainApp.mxml........
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="{onCreationComplete()}"
xmlns:components="components.*"
>
<mx:Script>
<![CDATA[
import components.lowestLevel;
private var lowest:lowestLevel;
private function onCreationComplete():void
{
lowest = new lowestLevel;
lowest.addEventListener('myEventType',mainAppListenerHandler);
}
private function mainAppListenerHandler(event:Event):void
{
trace("ive been heard in main app")
}
]]>
</mx:Script>
<components:middleLevel/>
</mx:WindowedApplication>
ミドルレベル.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
width="900"
height="50"
creationComplete="{ addEventListener('myEventType',listenerHandler);}"
>
<mx:Script>
<![CDATA[
import mx.core.Application;
import mx.managers.PopUpManager;
import actionScript.sql;
private function launchViewAllLoads(event:MouseEvent):void
{
sql.getSourceFilesToView()
var win:lowestLevel = new lowestLevel();
PopUpManager.addPopUp(win,parent,true);
PopUpManager.centerPopUp(win);
}
private function listenerHandler(event:Event):void
{
trace("im heard at the Middle level" )
}
]]>
</mx:Script>
<mx:Button id="btnViewAllLoads"
label="View Current"
click="{launchViewAllLoads(event)};"
/>
</mx:Canvas>
最低レベル.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" width="800" height="550"
title="View All Loads" horizontalAlign="center"
creationComplete="{ addEventListener('myEventType',listenerHandler);}"
>
<mx:Script>
<![CDATA[
import mx.core.IFlexDisplayObject;
import mx.events.CloseEvent;
import mx.managers.PopUpManager;
private function listenerHandler(event:Event):void
{
trace("im heard at the lowest level" )
}
private function sourceFilesToViewClickedHandler():void
{
PopUpManager.removePopUp(this as IFlexDisplayObject);
var myEvent:Event = new Event('myEventType' ,true,true);
dispatchEvent(myEvent);
}
]]>
</mx:Script>
<mx:Canvas id="cSourceFiles" width = "100%" height="100%">
<mx:DataGrid id="dgSourceFiles"
click="{sourceFilesToViewClickedHandler()}">
<mx:columns>
<mx:DataGridColumn dataField="Batch" headerText="Batch" width="80"/>
<mx:DataGridColumn dataField="LastUpdated" headerText="Last Updated" width="85"/>
</mx:columns>
</mx:DataGrid>
</mx:Canvas>
</mx:TitleWindow>