Hola
Jimram !
Puedes utilizar una función muy útil que se encuentra en el paquete
flash.utils.getDefinitionByName.
Un ejemplo de implementación:
Código actionscript:
Ver original<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import flash.utils.getDefinitionByName;
[Bindable]
private var _data:Array;
private function init():void {
_data =
[{label:'Componente1', data:'componentes.Comp1'},
{label:'Componente2', data:'componentes.Comp2'}];
}
private function onClick():void {
var data:String = cb.selectedItem.data;
var ClassRef:Class = getDefinitionByName(data) as Class;
PopUpManager.createPopUp(this, ClassRef, true);
}
]]>
</mx:Script>
<mx:ComboBox dataProvider="{_data}" id="cb" />
<mx:Button label="Button" click="onClick()"/>
</mx:Application>
Puedes ver que en el paquete 'componentes' se encuentran todos los componentes valga la redundancia y con la función getDefinitionByName obtengo la referencia a la clase, pero aquí hay un pequeño problema, debemos de forzar al compilador que incluya la clases que estamos generando dinámicamente, si lo compilas como esta, te va a dar un error en tiempo de ejecución cuando intentes instanciar una clase al dar click al botón.
Para resolver esto, tienes que crear variables de los tipos que vas a instanciar en tiempo en ejecución para que el compilador las agregue:
Código actionscript:
Ver original<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import flash.utils.getDefinitionByName;
import componentes.*; //Nueva línea
[Bindable]
private var _data:Array;
//Con esto el compilador las añadirá.
private var _c1:Comp1; //Nueva línea
private var _c2:Comp2; //Nueva línea
private function init():void {
_data =
[{label:'Componente1', data:'componentes.Comp1'},
{label:'Componente2', data:'componentes.Comp2'}];
}
private function onClick():void {
var data:String = cb.selectedItem.data;
var ClassRef:Class = getDefinitionByName(data) as Class;
PopUpManager.createPopUp(this, ClassRef, true);
}
]]>
</mx:Script>
<mx:ComboBox dataProvider="{_data}" id="cb" />
<mx:Button label="Button" click="onClick()"/>
</mx:Application>
Como ves, está un poco sucia la solución pero es la única forma de resolverlo, otra forma es decirle al compilador que añada las clases sin recurrir a lo anterior.
Das click derecho sobre el proyecto->propiedades->Compilador Flex
Añades la siguiente directiva en el campo argumentos adicionales de compilación:
-includes=componentes.Comp1,componentes.Comp2
Con esto ya no necesitamos declarar las variables como en la forma anterior pero sigue siendo una solución donde vas a tener que abrir el proyecto y volverlo a recompilar si agregas más clases.
Un saludote !