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

Responder a