Flex/AS3 – Truques e Dicas #5 – [Bindable] & Change Watcher

Flex/AS3 – Truques e Dicas #5 – [Bindable] & Change Watcher

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:

[coolcode] [Bindable] private var nomeCliente:String=”Mario”;
[/coolcode] 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:
[coolcode] [Bindable] 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”;
[/coolcode] 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:

[coolcode] private var vigia:ChangeWatcher;

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);
[/coolcode] Esta operação é quase como se adicionassemos um eventListner “Change” ao cliente.lang mas com mais vantagens, e como tal necessita do eventHandler onMudaElemento:
[coolcode] private function onMudaElemento(evt:PropertyChangeEvent):void {
trace(“Propriedade “+evt.property+” alterada de : “+evt.oldValue+” para “+evt.newValue);
}
[/coolcode] 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 comments

add yours
  • Brian April 4, 2009

    Excelente!

  • rafa August 27, 2009

    da hora…vlwssss

  • Felipe May 7, 2011

    Fantástico!!! Vlw!

Leave a Comment

Post