Boa explanação....
Valeu!

hehehe


Em 27/11/07, Erko Bridee de Almeida Cabrera <[EMAIL PROTECTED]>
escreveu:
>
> hehe excelente explicação ;)
>
> quanto minha citação foi sobre algo assim como ocorre no java com o
> garbarage collector, tem é bom, mas é sempre bom procurar uma forma
> otimizada de
> utilizar \o/
>
> com o bindable mesma coisa, é ótimo, quebra um galho
> mas quanto mais otimizarmos o nosso código melhor ;)
>
> []´s
>
> Em 27/11/07, Beck Novaes <[EMAIL PROTECTED] > escreveu:
> >
> >
> > ######################################################
> > # Ministério da Saúde Adverte: Este post será bem maior do que o
> > # convencional e esta explicação sobre o funcionamento viciante
> > # do Data Binding pode fazer o seu cérebro entrar em loop.
> > ######################################################
> >
> > O [Bindable] é uma Metadata Tag o que significa dizer que é uma
> > instrução para o compilador fazer alguma coisa. Neste caso você está
> > falando para o compilador gerar o código necessário para sua
> > propriedade ser a fonte do DataBinding.
> >
> > O segredo do funcionamento do DataBinding está na classe
> > "mx.binding.utils.ChangeWatcher". Esta classe se baseia em listeners
> > para fazer a "mágica" do DataBinding.
> >
> > Tomemos o seguinte trecho de código abaixo para facilitar a
> > explicação:
> > <mx:TextInput id="tiSource"/>
> > <mx:TextInput id="tiDestination" text="{tiSource.text}"/>
> >
> > Neste exemplo, toda vez que o usuário digitar algo no TextInput
> > "tiSource" isto será automaticamente copiado para o TextInput
> > "tiDestination".
> >
> > Isto é possível porque a propriedade "text" é Bindable. Como tal, toda
> > vez que esta propriedade mudar ela distribuirá um evento - que neste
> > caso é chamado de "textChanged". Graças ao ChangeWatcher, que é usado
> > implicitamente toda vez que usamos as chaves {} para determinar o
> > Binding, será criado automaticamente um EventHandler para tratar este
> > evento "textChanged". A implementação deste EventHandler pegará o
> > valor do "text" de "tiSource" e copiará para o "text" de
> > "tiDestination".
> >
> > Em outras palavras, a mágica do DataBinding é um código que é gerado
> > automaticamente pelo compilador do Flex que se baseia na arquitetura
> > Listener - Handler que já conhecemos: alguém distribui um evento e
> > alguém ouve para fazer alguma coisa. Neste caso uma propriedade muda,
> > e um código gerado automaticamente através de uma sintaxe predefinida
> > (chaves{}) copia o valor desta propriedade para outra.
> >
> > Eu fiz um teste no Flex usando a opção keep-generated-
> > actionscript=true  com uma propriedade Bindable e o resultado segue
> > abaixo.
> >
> > Test.mxml
> > ========
> >
> > <?xml version="1.0" encoding="utf-8"?>
> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> >     width="100%" height="100%">
> >         <mx:Script>
> >                 <![CDATA[
> >                         [Bindable]
> >                         private var myProp:String;
> >                 ]]>
> >         </mx:Script>
> > </mx:Application>
> >
> >
> > _Test- binding-generated.as (Código gerado pelo compilador Flex)
> > ======================================================
> > class BindableProperty
> > {
> >
> >     [Bindable(event="propertyChange")]
> >     private function get myProp():String
> >     {
> >         return this._1060147409myProp;
> >     }
> >
> >     private function set myProp(value:String):void
> >     {
> >         var oldValue:Object = this._1060147409myProp;
> >         if (oldValue !== value)
> >         {
> >                         this._1060147409myProp = value;
> >
> > dispatchEvent(mx.events.PropertyChangeEvent.createUpdateEvent(this,
> > "myProp", oldValue, value));
> >         }
> >     }
> > }
> >
> > Ou seja, o usar o [Bindable] o compilador Flex gerou o arquivo "_Test-
> > binding-generated.as" cujo conteúdo pode ser visto acima. Observe que
> > no "set" da propriedade um evento é disparado. No MXML acima se a
> > propriedade "myProp " não fosse Bindable este código não seria gerado.
> > Mas isso é só uma parte do funcionamento do Bindable. Ainda é preciso
> > definir o que irá acontecer toda vez que o "myProp" mudar.
> >
> > Primeiramente apenas definimos a propriedade como Bindable. Agora
> > vamos usá-la.
> >
> > Test.mxml
> > ========
> >
> > <?xml version="1.0" encoding="utf-8"?>
> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml "
> >     width="100%" height="100%">
> >         <mx:Script>
> >                 <![CDATA[
> >                         [Bindable]
> >                         private var myProp:String;
> >                 ]]>
> >         </mx:Script>
> >         <mx:TextInput id="myTextInput" text="{myProp}"/> <!-- USANDO O
> > BINDING -->
> > </mx:Application>
> >
> > Agora, outro trecho de código gerado pelo Flex, desta vez no arquivo
> > "Test-generated.as" é o seguinte:
> >
> > Test-generated.as
> > ===============
> >
> > private function _Test_bindingsSetup():void
> > {
> > ...
> > binding = new mx.binding.Binding(this,
> >             function():String
> >             {
> >                 var result:* = (myProp);
> >                 var stringResult:String = (result == undefined ?
> > null : String(result));
> >                 return stringResult;
> >             },
> >             function(_sourceFunctionReturnValue:String):void
> >             {
> >
> >                 myTextInput.text = _sourceFunctionReturnValue;
> >             },
> >             "myTextInput.text");
> > ...
> > }
> >
> > Quem quiser entender o que faz cada linha do trecho de código acima
> > pode olhar no código fonte da classe mx.binding. Binding. Mas em
> > resumo, é este trecho de código que pega o valor de "myProp" toda vez
> > que ele mudar e copia para "myTextInput.text".
> >
> > Por fim, eu gostaria de sintetizar o que o Daniel e o Erko.
> >
> > Erko (Tese):
> > "então a dica é: use [bindable] para o que for realmente necessário "
> >
> > Daniel (Antítese):
> > "Use bindable para tudo. Acredito ser muito dificil ele prejudicar a
> > performance de forma a ser perceptíviel"
> >
> > Beck (Síntese):
> > Você pode sim usar o Bindable despreocupadamente do ponto de vista da
> > performance, mas em alguns casos o Bindable reduz a legibilidade do
> > seu código, o que dificulta na manutenção. Além disso por usar Event
> > Listeners, o Bindable cria dependências entre os objetos o que impede
> > que eles sejam excluídos da memória pelo Garbage Collection.
> >
> > Será que alguém entedeu alguma coisa? Será que alguém leu tudo
> > isso? :-)
> >
> > []'s
> > Beck Novaes
> >
> >
> > On 23 nov, 14:20, Daniel Schmitz <[EMAIL PROTECTED] > wrote:
> > > "então a dica é: use [bindable] para o que for realmente necessário "
> > >
> > > Use bindable para tudo. Acredito ser muito dificil ele prejudicar a
> > > performance de forma a ser perceptíviel
> > >
> > > Outra coisa, o bindable ajuda a manter o seu código mais limpo e com
> > > mens bugs. Só isso já compensa o 100 milisegundos perdidos por causa
> > > do bindable.
> > >
> > > Agora, não culpe o bindable lento se seu grid tem 10.000 registros :)
> > > Ae ninguem aguenta :)
> > >
> > > Abraços,
> > >  Daniel Schmitz
> > >
> > > On 23 nov, 11:45, "Erko Bridee de Almeida Cabrera"
> > >
> > > < [EMAIL PROTECTED]> wrote:
> > > > Marcelo quanto a sua pergunta:
> > >
> > > > campos bindable tendem a diminuir a performace do sistema???
> > >
> > > > do ponto de vista gasto computacional (aumento do consumo de
> > processamento)
> > > > a resposta seria SIM, mas isso depende muito de como vc vai usar
> > >
> > > > este recurso é amplamente utilizado em aplicações flex
> > >
> > > > é como se você tivesse um método set para este atributo que nele
> > > > vc alem de atualizar o valor do atributo, sai percorrendo toda tua
> > aplicação
> > > > vendo onde que este está relacionado a campos e outros compontes
> > > > atualizando os mesmo
> > >
> > > > então a dica é: use [bindable] para o que for realmente necessário
> > >
> > > > []´s
> > >
> > > > Em 23/11/07, Thiago Rodrigues Fernandes <[EMAIL PROTECTED]>
> > escreveu:
> > >
> > > > > Eu nunca senti diferença usando bindable ou não...
> > >
> > > > > Não sei no caso de muitos registros.
> > >
> > > > > --
> > > > > Att,
> > > > > Thiago R. Fernandes
> > >
> > > > > On Nov 23, 2007 11:16 AM, Marcelo Moacir Florindo <
> > > > > [EMAIL PROTECTED]> wrote:
> > >
> > > > > > campos bindable tendem a diminuir a performace do sistema???
> > >
> > > > > > Marcelo
> > >
> > > > > > Em 23/11/07, Erko Bridee de Almeida Cabrera <
> > [EMAIL PROTECTED]>
> > > > > > escreveu:
> > >
> > > > > > > Ele indica para oq tu define como bindable que seja
> > observado...
> > >
> > > > > > > por exemplo vc tem um atributo e marca ele como observado
> > [bindable]
> > >
> > > > > > > e este vc relaciona a um campo....
> > >
> > > > > > > quando você mudar o valor desse campo ele irá automaticamente
> > > > > > > atualizar
> > > > > > > o campo que está relacionado com este atributo...
> > >
> > > > > > > caso tu não utilize o bindable, a atualização do campo não
> > ocorreria
> > > > > > > quando você alterar o valor do atributo...
> > >
> > > > > > > []´s
> > > > > > > --
> > > > > > > Att,
> > > > > > > Erko Bridee de Almeida Cabrera
> > > > > > >http://erkobridee.com/
> > > > > > >http://www.portaljava.com
> > >
> > > > > > --
> > > > > > Marcelo Moacir Florindo
> > > > > > Analista/Desenvolvedor
> > > > > >http://www.gestaotec.com.br
> > >
> > > > --
> > > > Att,
> > > > Erko Bridee de Almeida
> > Cabrerahttp://erkobridee.com/http://www.portaljava.com
> > http://erkobridee.com/
> > <http://www.portaljava.com>http://www.portaljava.com
> > > >
> >


-- 
Marcelo Moacir Florindo
Analista/Desenvolvedor
http://www.gestaotec.com.br

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a