0

Flex 4.5 でコンパイルされたアプリケーションがあり、Flex 3.5 でコンパイルされた他のアプリケーションを (SWFLoader を使用して) ロードすると、正常に動作しますが、「SystemManager(myLoader.content)」という文を実行すると、システムに次のエラーが表示されます。

TypeError: Error #1034: Error de conversión forzada: no se puede convertir _AnalizaOrganigramaTest_mx_managers_SystemManager@8450eb9 en mx.managers.SystemManager.
at AnaTestModule/_mlCargada()[C:\eanaliza\branch\peticiones3_p9184\40 flex\flex\AnaTestModule\src\AnaTestModule.mxml:28]
at AnaTestModule/__myLoader_complete()[C:\eanaliza\branch\peticiones3_p9184\40 flex\flex\AnaTestModule\src\AnaTestModule.mxml:43]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
at mx.controls::SWFLoader/http://www.adobe.com/2006/flex/mx/internal::contentLoaderInfo_completeEventHandler()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\controls\SWFLoader.as:2292]

これは Flex 4.5 アプリケーション コードです。

<fx:Script>
    <![CDATA[
        import mx.managers.SystemManager;

        [Bindable]
        public var loadedSM:SystemManager;

        protected function _mlInit():void
        {
            myLoader.source = "/analiza_peticiones3_p9184/AnalizaOrganigramaTest-debug/AnalizaOrganigramaTest.swf";
            myLoader.load();
        }
        private function _mlCargada():void
        {
            loadedSM = SystemManager(myLoader.content);             
        }
    ]]>
</fx:Script>

<s:SWFLoader id="myLoader"  
             loadForCompatibility="true" 
             complete="_mlCargada();" 
             maintainAspectRatio="true" 
             scaleContent="false"  
                 />         

誰でも私を助けることができますか?前もって感謝します。

4

1 に答える 1

1

私はこれに似たものに取り組んできました。GreenSock の LoaderMax を使用してみてください。 http://www.greensock.com/loadermax/

私はマルチバージョンのサブアプリケーションを使用しており、SystemManager も試しましたが、これはどこにもつながりませんでした。LoaderMax に戻りました。RSL 読み込みエラーが多すぎて、SystemManager を使用していませんでした。

また、マーシャリングのサポートが必要になる場合もあります。

親アプリは SDK 4.5 です。これは、2 つの SWC ファイル (4.5) を別のアプリケーション (4.6) と共有します。親アプリは、SDK 4.1 アプリケーションをそれ自体にロードします。

これはほとんどの部分で機能していますが、リンクされたアセットと相対パスのトラブルシューティングはまだです。しかし、全体として、アプリケーションはロードされます。

親アプリのビュー画面で、子アプリをロードします。

[Bindable] private var childAppLink= "http://myserver.com/AppRoot/@@version/controls/Application.swf";
[Bindable] private var altChildAppLink:String = "/AppRoot/@@version/controls/Application.swf";
[Bindable] private var loaderQueue:LoaderMax = new LoaderMax({name:"ChildApp4_0_Loader",onProgress:handleLoaderProgress,onComplete:handleLoaderComplete,onError:handleLoadingError});

protected function loadUsingLoaderMax():void
        {
            childAppLink= StringUtils.replace(childAppLink,'@@version',cm.s.childAppVersion);
            altChildAppLink= StringUtils.replace(altChildAppLink,'@@version',cm.s.childAppVersion);

            var swfvars:SWFLoaderVars = new SWFLoaderVars();
            var loaderRequest:URLRequest = new URLRequest();
            var loaderVars:URLVariables = new URLVariables();
            var loaderContexts:LoaderContext = new LoaderContext();

            LoaderMax.contentDisplayClass = FlexContentDisplay;

            loaderVars.DEBUG            = cm.s.debug;
            loaderVars.inChildMode      = "true"; //set this as a string!
            loaderVars.bpu              = String(u.userId + ';' + u.currentLocationId);
            loaderVars.sv               = cm.s.childAppVersion;
            loaderVars.KEYWORD          = 'XXXXX';

            loaderContexts.applicationDomain = new ApplicationDomain();

            if(Security.sandboxType == Security.REMOTE)
                loaderContexts.securityDomain = SecurityDomain.currentDomain;

            loaderRequest.url = childAppLink;
            loaderRequest.data = loaderVars;
            loaderRequest.method = URLRequestMethod.GET;

            swfvars.name("ChildApplication_4_0");
            swfvars.estimatedBytes(410000000);
            swfvars.container(ChildAppPH);
            swfvars.x(0);
            swfvars.autoPlay(true);
            swfvars.scaleMode("none");
            swfvars.alternateURL(altChildAppLink);
            swfvars.context(loaderContexts);

            loaderQueue.append(new com.greensock.loading.SWFLoader(loaderRequest,swfvars) );

            this.addEventListener("mx.managers.SystemManager.isBootstrapRoot", systemManagerHandler);
            this.addEventListener("mx.managers.SystemManager.isStageRoot", systemManagerHandler);
            ShoplandPlaceholder.systemManager.addEventListener(FlexEvent.CREATION_COMPLETE,handleLoaderComplete);

            loaderQueue.load();
            ChildAppPH.visible = false;
            ChildAppPH.alpha = 0;
        }

protected function systemManagerHandler(event:Event):void
            {
                event.preventDefault(); 
            }

およびプレースホルダーの MXML:

<s:SWFLoader id="ChildAppPH" width="1010" height="610" verticalCenter="305" horizontalCenter="505" top="10" />

子アプリケーションは、いくつかの新しい flashvars (this.parameters) を処理するようにセットアップされており、ロード プロシージャで何をすべきかを伝えます。子アプリはスタンドアロンであり、これがなくても機能するため、二重目的のアプリケーションになりました。1) スタンドアロン、2) 子アプリ (inChildMode)

于 2012-08-08T14:34:44.937 に答える