Bem, depois de uma duvida bem pertinente no fórum do blog que demonstrava a dificuldade em encontrar uma função que sincronizasse 2 objectos (e saber o nome das propriedades dele), decidi começar a inverstigar e reparei que não existe nada na web (pelo menos nao encontrei) a falar deste assunto. Não sei se entendi bem a pergunta do utilizador, mas a lógica não seria fazer uma cópia de um objecto para outro, mas sim actualizar o objecto de destino com as propriedades e suas definições do objecto de origem…
Bem, parecia façil mas acreditem que não foi muito facil… copiar as propriedades era facil:
trace("Propriedade: "+prop.toString())
}
Mas como saber o nome da propriedade?? imaginem o seguinte objecto:
objectoOrigem = new Object;
objectoOrigem.propriedade1="a";
objectoOrigem.propriedade2="b"
O que eu quero saber é como se chamam as propriedades do objecto, que neste caso seriam “propriedade1″ e “propriedade2″ e aqui o meu problema, como saber os nomes das propriedades de um objecto qualquer??
Aqui começou a minha investigação, depois de quase 1h e meia, de passar por muitos for each, de classes como describeType, não encontrei nada nativo no as3/flex que me desse o nome dessas propriedades… até que encontrei uma caracteristica muito “estranha” e desconhecida para mim que simplificou o meu trabalho em muito… se o for each percorria as definições das propriedades, o for simples percorria a propriedade, e assim ficou resolvido o mistério.
Segue então para download um class simples feita com recurso a apenas 2 ciclos que consegue sincronizar objectos, ou seja, tendo os 2 objectos:
private var objectoDestino:Object;
//ORIGEM:
objectoOrigem = new Object;
objectoOrigem.propriedade1="a";
objectoOrigem.propriedade2="b"
//DESTINO:
objectoDestino = new Object;
objectoDestino.propriedade1="h";
//Utilizando a classe que fiz:
import com.msdevstudio.ObjectSync;
private var Sync:ObjectSync;
Sync = new ObjectSync(objectoOrigem, objectoDestino);
//ficamos com o objectoDestino:
objectoDestino.propriedade1="a";
objectoDestino.pripriedade2="b";
//igual ao objectoOrigem.
Bom, espero que seja util!
Podem fazer o download da class a partir da resposta no fórum do blog ou aqui
Abraço.




3 Comentários
Interessante.
Apenas sugeria que disponibilizasses o tal ciclo que falaste, ali na listagem do código, para quem quisesse ver um exemplo rápido sem ter que ir buscar a classe.
Para sincronizar 2 objetos utilizo somente o seguinte:
for(var propriedade:String in objeto1){
objeto2[proprieade] = objeto1[propriedade];
}
Sim lucas, é isso que é feito no package