AS3 – Como sincronizar 2 objectos!

AS3 – Como sincronizar 2 objectos!

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:

for each(var prop:* in ObjectoOrigem) {

trace(“Propriedade: “+prop.toString())

}

Mas como saber o nome da propriedade?? imaginem o seguinte objecto:



private var objectoOrigem:Object;

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 objectoOrigem:Object;

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 comments

add yours
  • Carlos Martins January 20, 2009

    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.

  • Lucas February 8, 2009

    Para sincronizar 2 objetos utilizo somente o seguinte:
    for(var propriedade:String in objeto1){
    objeto2[proprieade] = objeto1[propriedade];
    }

  • Mário Santos February 8, 2009

    Sim lucas, é isso que é feito no package :P

Leave a Comment

Post