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.

Deixe um comentário ou um Trackback
   

3 Comentários

  1. January 20, 2009 às 9:30 am | Permalink

    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.

  2. Lucas
    February 8, 2009 às 11:39 am | Permalink

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

  3. February 8, 2009 às 9:27 pm | Permalink

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

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*

Spam Protection by WP-SpamFree