Uma coisa que acho muito legal é a criação dinâmica de objetos.
Bem como isso funciona:
1. Fazer o import das classes que serão utilizadas.
import flash.net.registerClassAlias;
import mx.core.UIComponent;
import mx.containers.TitleWindow;
import mx.controls.TextInput;
import views.CadCliente;
2. Registrar as classes que você irá usar. O compilador "precisa" saber quais classes precisam ser compiladas. Para isso é necessário criar uma instância do objeto com new ou com registerClassAlias:
registerClassAlias("views.CadCliente", CadCliente); // herda de TitleWindow
registerClassAlias("mx.controls.TextInput", TextInput);
Registrando as classes no aquivo que tem a tag Applicattion irá fazer com que possa ser criado objetos de forma dinâmica em qualquer parte do sistema.
3. Criação dinâmica.
import flash.net.getClassByAlias;
import flash.utils.getDefinitionByName;
private function criacaoDinamica():void {
// var clazz:Class = getDefinitionByName("views.CadCliente") as Class; ou
var clazz:Class = getClassByAlias("views.CadCliente");
var window:TitleWindow = TitleWindow(PopUpManager.createPopUp(this, clazz, true));
var clazzTI:Class = getClassByAlias("mx.controls.TextInput");
var instance:UIComponent = new clazzTI() as UIComponent;
window.addChild(instance);
}
Em acréscimo dois métodos interessantes:
flash.utils.getQualifiedClassName e flash.utils.getQualifiedSuperclassName.
Os dois recebem um object como parâmetro e retornam uma string com o nome completo (pacote + classe) da classe (getQualifiedClassName) e da sua classe pai (getQualifiedSuperclassName).
Bem como isso funciona:
1. Fazer o import das classes que serão utilizadas.
import flash.net.registerClassAlias;
import mx.core.UIComponent;
import mx.containers.TitleWindow;
import mx.controls.TextInput;
import views.CadCliente;
2. Registrar as classes que você irá usar. O compilador "precisa" saber quais classes precisam ser compiladas. Para isso é necessário criar uma instância do objeto com new ou com registerClassAlias:
registerClassAlias("views.CadCliente", CadCliente); // herda de TitleWindow
registerClassAlias("mx.controls.TextInput", TextInput);
Registrando as classes no aquivo que tem a tag Applicattion irá fazer com que possa ser criado objetos de forma dinâmica em qualquer parte do sistema.
3. Criação dinâmica.
import flash.net.getClassByAlias;
import flash.utils.getDefinitionByName;
private function criacaoDinamica():void {
// var clazz:Class = getDefinitionByName("views.CadCliente") as Class; ou
var clazz:Class = getClassByAlias("views.CadCliente");
var window:TitleWindow = TitleWindow(PopUpManager.createPopUp(this, clazz, true));
var clazzTI:Class = getClassByAlias("mx.controls.TextInput");
var instance:UIComponent = new clazzTI() as UIComponent;
window.addChild(instance);
}
Em acréscimo dois métodos interessantes:
flash.utils.getQualifiedClassName e flash.utils.getQualifiedSuperclassName.
Os dois recebem um object como parâmetro e retornam uma string com o nome completo (pacote + classe) da classe (getQualifiedClassName) e da sua classe pai (getQualifiedSuperclassName).
Puxa vida: extremamente útil! Obrigado!
ResponderExcluirPS: essa pérola postada em Abril e nenhum comentário ainda? Cade o reconhecimento da comunidade? Affe..
Felipe
ResponderExcluirMuito bom cara !
Valeu!
Cara, inutil...Mas a intençao eh o que vale.
ResponderExcluirObrigado pelo post!
ResponderExcluirResolvi um problema com Java BlazeDS (AMF Remoting).
Cara essa sua solução é muito útil,
ResponderExcluirpois aqui na minha aplicação agora não preciso criar uma função ou if para cada objeto que eu quero criar, apenas preciso saber o seu nome.
Show de bola
Parabéns
Show de bola!!!!!
ResponderExcluirÉ desse tipo de conteúdo que precisamos.
Parabéns!
Muito legal, parabéns!!!
ResponderExcluirSó uma dúvida, é possível instancias dinamicamente um objeto através de um nome fornecido em tempo de execução? ou seja, sem a possibilidade de realizar o import?
@Pedro Zatta
ResponderExcluirObrigado.
O nome da classe vc pode obter de qq lugar, até mesmo digitando numa TextInput em tempo de execução.
Mas sempre será necessário o import e o registro (com new ou registerClassAlias) pq o compilador precisa saber o q "levar" junto.
[]s
Parabéns, muito util.
ResponderExcluirEstou utilizando no projeto de estudo que estou desenvolvendo
Arnaldo
Kralho.. valeu!! mesmo sendo um post antigasso me ajudou bastante!! o blaze nao tava registrando minhas classes!!
ResponderExcluirCara, mto obrigado pelo post! resolvi meu problema graças a ele!!
ResponderExcluirValeu Fabio!
muito útil. Obrigado
ResponderExcluir