2012-06-27 2 views
0

J'ai une application compilée en Flex 4.5 et je charge (avec SWFLoader) autre application compilée en Flex 3.5, ça marche bien mais quand j'exécute la phrase "SystemManager (myLoader .content) » le système affiche l'erreur:Flex sous-applications: App sdk 3.5 à l'intérieur 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] 

C'est Flex 4.5 code d'application:

<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" 
       />   

quelqu'un peut-il me aider? Merci d'avance.

Répondre

1

J'ai travaillé sur quelque chose de similaire. Essayez d'utiliser LoaderMax de GreenSock. En utilisant une sous-application multiversion dans la mienne et essayé aussi SystemManager, cela n'a mené nulle part et je suis retourné à LoaderMax. Je recevais beaucoup trop d'erreurs de chargement RSL et ce n'est pas en utilisant SystemManager.

vous pouvez également exécuter dans la nécessité de Marshalling support.

Le parent App est SDK 4.5, ce partage deux fichiers SWC (4.5) avec une autre application (4.6) L'application parent charge une application SDK 4.1 en lui-même . Cela fonctionne pour la plupart, je suis toujours en train de dépanner les actifs liés et les chemins relatifs. Mais dans l'ensemble, l'application charge.

Dans l'écran de vue de l'application mère pour charger l'application de l'enfant:

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

et MXML pour l'espace réservé:

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

L'application de l'enfant est configuré pour gérer de nouveaux flashvars (this.parameters) qui lui disent quoi faire dans ses procédures de chargement. l'application enfant est autonome et peut fonctionner sans cela, elle est donc devenue une application à double usage. 1) autonome, 2) app enfant (inChildMode)