Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

5oct/092

Flex Modules – Utiliser ModuleManager pour charger des modules

Vous pouvez utiliser le ModuleLoader Flex (haut niveau) pour charger des modules mais vous pouvez aussi utiliser la classe ModuleManager pour cela. Cette technique est moins abstraite que d'utiliser le tag <mx:ModuleLoader>, mais elle offre un plus grand contrôle sur le chargement des modules.

Pour utiliser le ModuleManager pour charger un module, vous devez tout d'abord récupérer une référence vers l'interface IModuleInfo du module en utilise la méthode ModuleManager.getModule(). Vous pouvez ensuite appeler la méthode load() de l'interface IModuleInfo. Enfin, vous pouvez utiliser la propriété "factory" de l'interface pour appeler la méthode create(), et faire une conversion de type (cast) vers le type de la classe du module.

L'exemple d'application suivant charge le fichier BarChartModule.swf et l'ajoute ensuite à la liste d'affichage pour qu'il apparaissent au démarrage de l'application.

<?xml version="1.0"?>
<!-- modules/ModuleLoaderApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="initApp()">
  <mx:Script>
    <![CDATA[
      import mx.events.ModuleEvent;
      import mx.modules.ModuleManager;
      import mx.modules.IModuleInfo;

      public var info:IModuleInfo;

      private function initApp():void {
        info = ModuleManager.getModule("BarChartModule.swf");
        info.addEventListener(ModuleEvent.READY, modEventHandler);
// Load the module into memory. Calling load() makes the
// IFlexModuleFactory available. You can then get an
// instance of the class using the factory's create()
// method.
        info.load();
      }

      private function modEventHandler(e:ModuleEvent):void {
// Add an instance of the module's class to the
// display list.
        vb1.addChild(info.factory.create() as BarChartModule);
      }
    ]]>
  </mx:Script>
  <mx:VBox id="vb1"/>
</mx:Application>
<?xml version="1.0"?>
<!– modules/ModuleLoaderApp.mxml –>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="initApp()">
<mx:Script>
<![CDATA[
import mx.events.ModuleEvent;
import mx.modules.ModuleManager;
import mx.modules.IModuleInfo;

public var info:IModuleInfo;

private function initApp():void {
info = ModuleManager.getModule("BarChartModule.swf");
info.addEventListener(ModuleEvent.READY, modEventHandler);
// Load the module into memory. Calling load() makes the
// IFlexModuleFactory available. You can then get an
// instance of the class using the factory's create()
// method.
info.load();
}

private function modEventHandler(e:ModuleEvent):void {
// Add an instance of the module's class to the
// display list.
vb1.addChild(info.factory.create() as BarChartModule);
}
]]>
</mx:Script>
<mx:VBox id="vb1"/>
</mx:Application>

Articles similaires

Commentaires (2) Trackbacks (0)
  1. Bonjour !

    Tout d'abord merci pour pour tous ces tuto, je serais complètement perdu sans ce site !

    Je développe une application qui charge dynamiquement plusieurs modules et communique avec selon les actions de l'utilisateur.
    J'aimerai savoir si il est possible de charger plusieurs fois le même module (donc le même SWF) et comment gérer le déchargement. Car il me semble que pour décharger un module, on a besoin de l'url, mais en ayant plusieurs fois la même url, je suis curieux de connaitre le comportement.

    Merci !

  2. Salut Jibey,
    merci pour le commentaire ;)
    Alors je pense qu'il est possible de charger plusieurs fois le même module. Pour cela, tu peux faire un test avec 2 ModuleLoader pointant sur la même url ou alors si tu utilises ModuleManager pour le faire en AS, tu va récupérer à chaque fois une instance de ton module, qui sera bien unique et tu pourras donc décharger chaque module (tu aura plusieurs objet ModuleLoader).

    En théorie, cela fonctionne, il reste juste à tester!

    Fabien


Leave a comment

(required)

Aucun trackbacks pour l'instant