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 > > > -- Att, Erko Bridee de Almeida Cabrera http://erkobridee.com/ http://www.portaljava.com --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---