سؤال

في طلبي الجوي ، أواجه مشاكل في التقاط الأحداث التي تم إرسالها في EventMap الخاص بي. يبدو أن الفصل الذي يرسل الأحداث مثل هذا:

اختصارات

[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));
    }
}    

أعلم أن هذا الحدث يتم إرساله من تصحيح الأخطاء ، لكنه لا يتم القبض عليه بواسطة EventMap التالي.

sportcutmap.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>

فيما يلي ملف التطبيق الرئيسي يسمى "Extercutexample"

اختصار exixample.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>

لماذا لا يصطاد eventmap الخاص بي الحدث؟

هل كانت مفيدة؟

المحلول

لأنني لم أكن أضيف الكائن إلى قائمة العرض ولم يمتد عرض الأحداث التي تم إرسالها لم يتم القبض عليها بواسطة EventMap. لحل هذه المشكلة ، قم بإنشاء متغير خاص من نوع GlobalDispatcher وإرسال الأحداث الخاصة بك من هذا المتغير.

private var dispatcher:GlobalDispatcher = new GlobalDispatcher();
...
this.dispatcher.dispatchEvent(new ShortCutEvent(ShortCutEvent.CENTERED_ZOOM_OUT, true));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top