Bem, toda a gente sabe que o Bindable nos salva em muitas situações, mas por vezes alem do bindable o ChangeWatcher pode ser muito util.
Uma curta explicação sobre o que é uma variavel bindable:
private var nomeCliente:String="Mario";
A tag [Bindable] que faz com que o valor da variavel nomeCliente seja monitorizada e em caso de alteração que todos os elementos na nossa aplicação que usem essa variavel sejam informados das alterações.
Mas agora imaginem que tenho um objecto:
var cliente:Object;
cliente=new Object;
cliente.nome="Mario";
cliente.tel="352 55 55 55";
cliente.email="admin@mail.com");
cliente.authLevel=1;
cliente.lang="PT_br";
cliente.pais="Portugal";
E quero saber quando foi alterada a lingua, e apenas a lingua… o resto não quero saber… claro que poderiamos fazer um método tradicionalmente sujo, guardando a lang do objecto numa variavel à parte, depois associando um evento change, por exemplo a um elemento que sofra a alteração quando o Bindable informar esse mesmo elemento, tal como um label:
Agora poderiamos saber quando essa alteração via bindable Ocorreu, já que ao mudar o label a função objectoMudou seria chamada e aí comparariamos o valor do cliente.lang com a variavel lang que tinhamos anteriormente, para sabermos se a lang foi alterada, mas isto tudo seria lógico se não existisse o chamado changeWatcher, que serve perfeitamente para saber quando uma propriedade de um objecto mudou. O seu uso é simples, tendo apenas uma obrigação, o objecto de ser inicializado como ObjectProxy() e nao como Object, já que sendo declarado como objecto ele não é passivel de ser observado. Vejam o exemplo seguindo o objecto cliente:
cliente=new ObjectProxy;
cliente.nome="Mario";
cliente.tel="352 55 55 55";
cliente.email="admin@mail.com");
cliente.authLevel=1;
cliente.lang="PT_br";
cliente.pais="Portugal";
vigia = ChangeWatcher.watch(cliente, ["lang"], onMudaElemento);
Esta operação é quase como se adicionassemos um eventListner “Change” ao cliente.lang mas com mais vantagens, e como tal necessita do eventHandler onMudaElemento:
trace("Propriedade "+evt.property+" alterada de : "+evt.oldValue+" para "+evt.newValue);
}
O evento é um PropertyChangeEvent onde nos passa muitas informaçãoes, tal como o valor anterior, e o novo valor o que elimina a necessidade de ter que verificar esses antigos e novos valores com recurso a mais variaveis…
Util não?




3 Comentários
Excelente!
da hora…vlwssss
Fantástico!!! Vlw!