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>
<!– 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
- Flex Modules – Pré-chargement de modules (preloading)
- Flex Modules – L'Event ModuleEvent.READY n'est jamais envoyé [Résolu]
- Flex Modules – Communication Application vers Module
- Flex Modules – Utiliser ModuleLoader pour charger et décharger des modules
- Flex Modules – Utiliser l'évènement Error (ModuleEvent.ERROR)
Aucun trackbacks pour l'instant






16 février 2011
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 !
17 février 2011
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