Flex / AIR:子应用程序上的本机拖放操作会触发错误的事件处理程序

时间:2014-12-18 11:50:42

标签: actionscript-3 flex air

我有两个Flex应用程序(App1App2)我想用作单独的应用程序(这里没问题),但第一个应用程序也应该能够在其窗口中加载第二个应用程序(也没问题)。两个应用都接受本机拖放(onDragInonDragDrop)。但是,当我将App2作为子应用程序(多版本)加载时,它的拖放处理程序不会被调用,而是被调用App1。我在这里缺少什么?

<!-- MAIN APP (App1) -->
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication 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="onComplete()">
<fx:Script>
    <![CDATA[                  

        import mx.controls.SWFLoader;
        import mx.events.FlexEvent;
        import mx.managers.DragManager;

        internal var app2:App2=null;    
        internal var _show2nd:Boolean=false;            

        protected function onComplete():void
        {
            addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);
            addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,  onDragDrop);                

            var context:LoaderContext = new LoaderContext();
            context.securityDomain = SecurityDomain.currentDomain;
            context.applicationDomain = new ApplicationDomain();

            if (app2 == null) app2 = new App2();
            contentLoader.loadForCompatibility = true;
            contentLoader.loaderContext = context;                 
        }

        private function onDragIn(e:NativeDragEvent):void
        {
            if  (e.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT) &&
                (e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array).length > 0)   
                    DragManager.acceptDragDrop(this);
        }

        private function onDragDrop(e:NativeDragEvent):void
        {
            var a:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
            (File(a[0]).extension == 'a') ? doThis() : doThat();
        }

        public function get show2nd():Boolean 
        {
            return _show2nd;
        }

        public function set show2nd(b:Boolean):void
        {
            if (!b)
            {
                _show2nd = false;
                contentLoader.unloadAndStop();
                return;
            }

            contentLoader.source = app2;                
            _show2nd = true;
        }
    ]]>
</fx:Script>    
<s:Button click="{show2nd = !show2nd}"/>
<mx:SWFLoader id="contentLoader"/>
</s:WindowedApplication>

<!-- SUB APP (App2) -->
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication 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="onComplete()">
<fx:Script>
    <![CDATA[                  
        import mx.events.FlexEvent;
        import mx.managers.DragManager;

        protected function onComplete():void
        {
            addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);
            addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,  onDragDrop);
        }

        private function onDragIn(e:NativeDragEvent):void
        {
            if  (e.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT) &&
                (e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array).length > 0)   
                    DragManager.acceptDragDrop(this);
        }

        private function onDragDrop(e:NativeDragEvent):void
        {
            var a:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
            (File(a[0]).extension == 'a') ? doThis() : doThat();
        }
    ]]>
</fx:Script>

0 个答案:

没有答案