我有两个Flex应用程序(App1
,App2
)我想用作单独的应用程序(这里没问题),但第一个应用程序也应该能够在其窗口中加载第二个应用程序(也没问题)。两个应用都接受本机拖放(onDragIn
,onDragDrop
)。但是,当我将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>