2012-06-27 2 views
0

У меня есть приложение, скомпилированное в Flex 4.5, и я загружаю (с помощью SWFLoader) другое приложение, скомпилированное в Flex 3.5, оно отлично работает, но когда я выполняю предложение «SystemManager (myLoader .content)»система показывает ошибку:Flex-приложения: приложение sdk 3.5 внутри App sdk 4.5

TypeError: Error #1034: Error de conversión forzada: no se puede convertir [email protected] 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" 
       />   

Может кто-нибудь мне помочь? Спасибо заранее.

ответ

1

Я работаю над чем-то похожим на это. Попробуйте использовать LoaderMax от GreenSock. http://www.greensock.com/loadermax/

Я использую многопользовательскую подпрограмму в шахте и попробовал SystemManager, это привело к ниоткуда, и я вернулся к LoaderMax. Я получал слишком много ошибок загрузки RSL и еще не использовал SystemManager.

Вам также может быть запущен в необходимости Marshalling support.

Родитель App является SDK 4.5, это разделяет два 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)