1

私の AIR アプリケーションでは、イベントマップでディスパッチされたイベントをキャッチする際に問題があります。イベントをディスパッチするクラスは次のようになります。

ショートカット.as

[Event(name="centeredZoomOut", type="flash.events.Event")]

public class Shortcuts extends EventDispatcher
{
    // Event Names
    public static const CENTERED_ZOOM_OUT:String = "centeredZoomOut";

    public function Shortcuts(target:IEventDispatcher=null)
    {
        super(target);
        NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
    }

    private function onKeyUp(event:KeyboardEvent):void
    {
        this.dispatchEvent(new Event(CENTERED_ZOOM_OUT, true));
    }
}    

デバッグからイベントがディスパッチされていることはわかっていますが、次のイベントマップではキャッチされていません。

ShortcutMap.mxml

<?xml version="1.0" encoding="utf-8"?>
<EventMap 
xmlns="http://mate.asfusion.com/"
xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.events.FlexEvent;
        import models.Shortcuts;
    ]]>
</mx:Script>

<EventHandlers type="{ Shortcuts.CENTERED_ZOOM_OUT }">
    <MethodInvoker generator="{ShortCutExample}" method="showAlert" arguments="{['centeredZoom']}" />
</EventHandlers>

「ShortCutExample」と呼ばれるメイン アプリケーション ファイルは次のとおりです。

ShortCutExample.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication 
xmlns:mx="http://www.adobe.com/2006/mxml" 
xmlns:maps="maps.*"
layout="absolute"  
creationComplete="init()">

<mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import models.Shortcuts;

        private var shortcuts:Shortcuts;

        private function init():void
        {
            this.shortcuts = new Shortcuts();
        }

        public function showAlert(value:String):void
        {
            Alert.show(value);
        }
    ]]>
</mx:Script>
<maps:ShortcutMap/>

</mx:WindowedApplication>

イベントマップがイベントをキャッチしないのはなぜですか?

4

1 に答える 1

1

オブジェクトをディスプレイリストに追加しておらず、DisplayObjectを拡張していなかったため、ディスパッチされたイベントはイベントマップによってキャッチされていませんでした。この問題を解決するには、GlobalDispatcher型のプライベート変数を作成し、その変数からイベントをディスパッチします。

private var dispatcher:GlobalDispatcher = new GlobalDispatcher();
...
this.dispatcher.dispatchEvent(new ShortCutEvent(ShortCutEvent.CENTERED_ZOOM_OUT, true));
于 2010-01-12T20:25:04.337 に答える