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 -~----------~----~----~----~------~----~------~--~---