2010-08-05 5 views
1

Je suis assez sûr que c'est totalement ce dont j'ai besoin, mais je ne peux pas le faire fonctionner pour une raison quelconque. Ce que je voudrais faire est d'appeler un composant arbitraire qui étend Canvas. Comme il peut y avoir une variété de composants nommés TestCanvasA, TestCanvasC, TestCanvasC que je ne connaîtrai pas avant l'exécution, j'ai pensé que ce serait la bonne façon de procéder. Voici ce que j'ai.AddChild avec Dynamic DispalyObject dans Flex

<mx:Script> 
    <![CDATA[ 
     import component.TestCanvas; 
     import mx.containers.Canvas; 
     import flash.display.Sprite; 
     import flash.utils.getDefinitionByName; 

     private function init(evt:Event):void{ 
      var Type:String="TestCanvas"; 
      var controlClass:Class = getDefinitionByName(Type) as Class; 
      this.addChild(new controlClass() as Canvas); 
     } 
    ]]> 
</mx:Script> 

Toutes les idées seraient géniales!

+0

Pouvez-vous expliquer ce que vous voulez dire par "ça ne marche pas"? A-t-il lancé une erreur? Si ce n'est pas le cas, vous pouvez réessayer après avoir installé [version de débogage de Flash Player] (http://www.adobe.com/support/flashplayer/downloads.html) pour vous assurer que vous ne manquiez pas l'erreur lancée. – Amarghosh

+0

En fait, cela a bien fonctionné. Mon problème était que je chargeais dans les classes à partir d'un SWC externe, et les classes n'étaient pas reconnues. Je l'ai eu à travailler, en chargeant une autre classe du SWC qui a importé et a déclaré la classe. Ensuite, je me suis juste assuré qu'il était complètement chargé et a couru getDefinitionByName() Merci encore! – abritez

Répondre

1

Donnez-lui le nom complet de la classe:

var type:String="component.TestCanvas"; 
var controlClass:Class = getDefinitionByName(Type) as Class; 

également une simple déclaration d'importation ne doit pas comprendre la définition de la classe dans le fichier SWF compilé à moins que des références à la classe dans l'application. Déclarez simplement (pas besoin d'initialiser) une variable de ce type quelque part dans le fichier SWF pour vous assurer que la définition est effectivement incluse.

var dummy:TestCanvas; 
+0

Merci de me répondre, mais malheureusement cela n'a pas fonctionné. Pour vous donner une meilleure idée de ce que j'essaie de faire. Je voudrais créer une bibliothèque externe pour que quelqu'un ajoute des fichiers modèles arbitraires composés de fichiers mxml. La façon dont je l'imagine est que je ne connaîtrai pas le nom du fichier mxml hormis l'héritage de Canvas. Je vais alors charger un fichier de configuration pendant l'exécution qui identifie le nom du mxml "templates" et faire un addChild pour l'ajouter à la scène. Faites-moi savoir si cela a du sens, ou si je fais quelque chose de mal. Merci! J'apprécie vraiment cela! – abritez