2009-12-07 6 views
0

C'est ma première fois ici, mais j'ai déjà trouvé de bonnes réponses ici, donc je voudrais remercier tout le monde.Flex/AS3: instancie automatiquement les classes de paquets dans un tableau (classes de plugin)

Je développe une petite application Flex et je veux instancier chaque classe d'un paquet dans un tableau, donc je peux l'analyser ensuite. Pour clarifier, j'essaie d'alléger un système de gestion de plugin pour mon application, avec l'ancienne routine canProcess/doProcess: Mes plugins sont tous dans un paquet, y compris une classe plugin abstraite. Tout d'abord, je crée une instance de chaque classe dans ce paquet (c'est là que j'ai besoin d'aide) et je les mets dans un tableau. Ensuite, chaque fois que j'ai besoin d'un plugin pour un item, j'analyse chaque classe de plugin dans mon tableau avec la méthode canProcess (l'item est le paramètre). Si un plugin dit oui, alors j'envoie l'item à la méthode doProcess et arrête d'analyser le tableau. Je sais que je pourrais implémenter manuellement chaque classe dans mon paquet, mais je préférerais ne pas prendre la peine de le faire.

Quelqu'un a une idée?

Thx

Répondre

1

réflexion AS3 ne vous permet pas de lister toutes les classes dans un package. Vous devrez écrire les noms de classe dans un fichier (xml) sur le serveur, le charger, puis utiliser getDefinitionByName pour obtenir les objets Class de ces chaînes, puis les instancier.

Tenir compte du fichier xml exemple:

<root package="boris.ratak"> 
    <className>Plugin1</className> 
    <className>Plugin2</className> 
    <className>Plugin3</className> 
</root> 

charge avec URLLoader et l'analyse syntaxique comme:

import flash.utils.getDefinitionByName; 

var pack:String = String([email protected]) + "."; 
for each(var cl:String in xml.className) 
{ 
    var name:String = pack + String(cl.text()); 
    var Type:Class = getDefinitionByName(name) as Class; 
    pluginArray.push(new Type()); 
} 
Questions connexes