2010-10-30 5 views
2

Je travaille sur une fonctionnalité pour une application qui nécessite la fonctionnalité Flex 4. En raison de certains problèmes de migration de l'application de Flex 3.5 à 4.0, j'ai décidé d'implémenter cette fonctionnalité en tant que module compilé avec Flex 4.0. La théorie est que l'application resterait compilée dans Flex 3.5 et chargerait le module quand il en aurait besoin.Chargement de modules flex compilés avec Flex 4 SDK dans une application compilée avec Flex 3.5

est ici le code de chargement du module:

public function loadDiagModule():void { 
    var moduleLoader:ModuleLoader = new ModuleLoader(); 
    moduleLoader.url = "module/DiagrammerModule.swf"; 
    moduleLoader.loadModule(); 
    moduleLoader.addEventListener(ModuleEvent.READY, onModuleReady); 
} 

protected function onModuleReady(moduleEvent:ModuleEvent):void 
{ 
    var moduleInfo:IModuleInfo = moduleEvent.module; 
    var sample:IDiagrammerModule = moduleInfo.factory.create() as IDiagrammerModule; 
    Application.application.addChild(sample.testRender()); 
} 

Malheureusement, je rencontre une erreur d'exécution lorsque je charge le module dans l'application:

VerifyError: Error #1014: Class mx.modules::ModuleBase could not be found. 
at flash.display::MovieClip/nextFrame() 
at mx.core::FlexModuleFactory/deferredNextFrame()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\FlexModuleFactory.as:631] 
at mx.core::FlexModuleFactory/update()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\FlexModuleFactory.as:401] 
at mx.core::FlexModuleFactory/moduleCompleteHandler()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\FlexModuleFactory.as:718] 

Je pense que cela peut être le résultat d'une discordance dans la définition de classe de ModuleBase dans Flex 3.5 et 4.0. Y a-t-il une sorte de changement de configuration avec mon application et/ou projet de module qui permettrait de remédier à cette erreur?

Voici quelques informations sur ma configuration: IDE: Flash Builder 4 plug-in

projet App

  • SDK: Flex 3.5
  • liaison cadre: Fusionné dans le code
  • arguments de compilateur supplémentaires: -locale = en_US, ja_JP -source-path =./locale/{locale}

Module projet

  • SDK: Flex 4.0
  • liaison cadre
  • : Utiliser SDK par défaut (bibliothèque partagée d'exécution)
  • Copier les fichiers non-intégré dans le fichier de sortie: true
  • Générer fichier SWF accessible: true
  • arguments de compilateur supplémentaires: -locale en_US
+0

Et quand j'ai changé mon module pour étendre Module au lieu de ModuleBase, j'obtiens l'erreur suivante: VerifyError: Erreur # 1053: Remplacement illégal de callInContext dans diag_DiagrammerModule_mx_core_FlexModuleFactory. – P4ndaman

Répondre

3

Chargement des modules compilés dans une autre version du SDK est le péché possible ce Flex 3.2, cependant il y a des considérations de compatibilité que vous devez considérer.

Il est ce qu'on appelle The Marshall Plan, et vous pouvez lire plus d'informations à ce sujet here et here essentiellement l'application hôte établit des sandbox pour les modules, et la communication entre eux est limité (bien que toujours très possible).

Espérons que ça aide.

+2

Si votre application principale est compilée avec 3.5, alors la version max que vous pouvez utiliser est 3.5. Votre version des modules compilés doit être égale ou inférieure à la version compilée de l'application principale. –

Questions connexes