<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Softwares para Automação Comercial e Desenvolvimento de Software Personalizado &#187; Bindable</title>
	<atom:link href="http://www.flexdev.com.br/home/tag/bindable/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.flexdev.com.br/home</link>
	<description>Softwares para Automação Comercial</description>
	<lastBuildDate>Tue, 21 Jun 2011 00:35:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>A mágica do [ Bindable ]</title>
		<link>http://www.flexdev.com.br/home/a-magica-do-bindable/</link>
		<comments>http://www.flexdev.com.br/home/a-magica-do-bindable/#comments</comments>
		<pubDate>Fri, 30 Nov 2007 20:18:44 +0000</pubDate>
		<dc:creator>Ebercom</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Bindable]]></category>

		<guid isPermaLink="false">http://www.flexdev.com.br/blog/a-magica-do-bindable/</guid>
		<description><![CDATA[TweetTweetPessoal.. Desde de que começei a utilizar Flex, venho usando uma palavrinha que até então me parecia que como um passe de mágica ela podia &#8220;avisar&#8221; que houve uma modificação nos objeto por ela &#8220;enfeitiçada&#8221;. Eis que navegando pelas listas sobre Flex encontrei uma explicação que até agora não vi melhor. Ela foi dada pelo [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://www.flexdev.com.br/home/a-magica-do-bindable/&via=flexdevbr&text=A mágica do [ Bindable ]&related=FlexDev:FlexDev&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http://www.flexdev.com.br/home/a-magica-do-bindable/&via=flexdevbr&text=A mágica do [ Bindable ]&related=FlexDev:FlexDev&lang=en&count=horizontal" class="twitter-share-button">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><p>Pessoal..</p>
<p>Desde de que começei a utilizar Flex, venho usando uma palavrinha que até  então me parecia que como um passe de mágica ela podia &#8220;avisar&#8221; que houve uma  modificação nos objeto por ela &#8220;enfeitiçada&#8221;. Eis que navegando pelas listas  sobre Flex encontrei uma explicação que até agora não vi melhor. Ela foi dada  pelo <a href="http://www.becklog.org/">Beck Novaes</a> e segue  abaixo para que todos possam compartilhar dessa que creio ser uma informação  muito esclarecedora.</p>
<p>Vamos lá&#8230;</p>
<p><span id="more-18"></span></p>
<p>##########################################################<br />
# Ministério  da Saúde Adverte: Este post será bem maior do que o  #<br />
# convencional e esta  explicação sobre o funcionamento viciante    #<br />
# do Data Binding pode fazer  o seu cérebro entrar em loop.            #<br />
#########################################################</p>
<p>O [Bindable] é uma Metadata Tag o que significa dizer que é uma<br />
instrução  para o compilador fazer alguma coisa. Neste caso você está<br />
falando para o  compilador gerar o código necessário para sua<br />
propriedade ser a fonte do  DataBinding.</p>
<p>O segredo do funcionamento do DataBinding está na classe<br />
&#8220;mx.binding.utils.ChangeWatcher&#8221;. Esta classe se baseia em listeners<br />
para fazer a &#8220;mágica&#8221; do DataBinding.</p>
<p>Tomemos o seguinte trecho de código abaixo para facilitar a<br />
explicação:</p>
<p>[xml]<mx:textinput id="tiSource"><br />
<mx:textinput id="tiDestination" text="{tiSource.text}"></mx:textinput>[/xml]</p>
<p>Neste exemplo, toda vez que o usuário digitar algo no TextInput<br />
&#8220;tiSource&#8221; isto será automaticamente copiado para o TextInput<br />
&#8220;tiDestination&#8221;.</p>
<p>Isto é possível porque a propriedade &#8220;text&#8221; é Bindable. Como tal, toda<br />
vez que esta propriedade mudar ela distribuirá um evento &#8211; que neste<br />
caso é chamado de &#8220;textChanged&#8221;. Graças ao ChangeWatcher, que é usado<br />
implicitamente toda vez que usamos as chaves {} para determinar o<br />
Binding, será criado automaticamente um EventHandler para tratar este<br />
evento &#8220;textChanged&#8221;. A implementação deste EventHandler pegará o<br />
valor  do &#8220;text&#8221; de &#8220;tiSource&#8221; e copiará para o &#8220;text&#8221; de<br />
&#8220;tiDestination&#8221;.</p>
<p>Em outras palavras, a mágica do DataBinding é um código que é gerado<br />
automaticamente pelo compilador do Flex que se baseia na arquitetura<br />
Listener &#8211; Handler que já conhecemos: alguém distribui um evento e<br />
alguém ouve para fazer alguma coisa. Neste caso uma propriedade muda,<br />
e  um código gerado automaticamente através de uma sintaxe predefinida<br />
(chaves{}) copia o valor desta propriedade para outra.</p>
<p>Eu fiz um teste no Flex usando a opção keep-generated-<br />
actionscript=true   com uma propriedade Bindable e o resultado segue<br />
abaixo.</p>
<p>Test.mxml<br />
========</p>
<p>[xml]<br />
<mx:application xmlns:mx="http://www.adobe.com/2006/mxml"><br />
width=&#8221;100%&#8221; height=&#8221;100%&#8221;><br />
<mx:Script><br />
<![CDATA[<br />
[Bindable]<br />
private var  myProp:String;<br />
]]&gt;<br />
</mx:Script><br />
</mx:Application><br />
[/xml]<br />
_Test-binding-generated.as (Código gerado pelo compilador Flex)<br />
======================================================<br />
[as]class  BindableProperty<br />
{</mx:application></p>
<p>[Bindable(event="propertyChange")]<br />
private function get  myProp():String<br />
{<br />
return this._1060147409myProp;<br />
}</p>
<p>private function set myProp(value:String):void<br />
{<br />
var  oldValue:Object = this._1060147409myProp;<br />
if (oldValue !== value)<br />
{<br />
this._1060147409myProp = value;</p>
<p>dispatchEvent(mx.events.PropertyChangeEvent.createUpdateEvent(this,<br />
&#8220;myProp&#8221;, oldValue, value));<br />
}<br />
}<br />
}<br />
[/as]<br />
Ou seja, o usar o [Bindable] o compilador Flex gerou o arquivo &#8220;_Test-<br />
binding-generated.as&#8221; cujo conteúdo pode ser visto acima. Observe que<br />
no  &#8220;set&#8221; da propriedade um evento é disparado. No MXML acima se a<br />
propriedade  &#8220;myProp &#8221; não fosse Bindable este código não seria gerado.<br />
Mas isso é só uma  parte do funcionamento do Bindable. Ainda é preciso<br />
definir o que irá  acontecer toda vez que o &#8220;myProp&#8221; mudar.</p>
<p>Primeiramente apenas definimos a propriedade como Bindable. Agora<br />
vamos  usá-la.</p>
<p>Test.mxml<br />
========</p>
<p>[xml]<?xml version="1.0" encoding="utf-8"?><br />
<mx:Application  xmlns:mx="http://www.adobe.com/2006/mxml"<br />
width="100%" height="100%"><br />
<mx:Script><br />
<![CDATA[<br />
[Bindable]<br />
private var  myProp:String;<br />
]]&gt;<br />
</mx:Script><br />
<mx:TextInput id="myTextInput" text="{myProp}"/> <!-- USANDO  O<br />
BINDING --><br />
</mx:Application><br />
[/xml]<br />
Agora, outro trecho de código gerado pelo Flex, desta vez no arquivo<br />
&#8220;Test-generated.as&#8221; é o seguinte:</p>
<p>Test-generated.as<br />
===============</p>
<p>[as]private function _Test_bindingsSetup():void<br />
{<br />
&#8230;<br />
binding = new  mx.binding.Binding(this,<br />
function():String<br />
{<br />
var result:* = (myProp);<br />
var  stringResult:String = (result == undefined ?<br />
null : String(result));<br />
return stringResult;<br />
},<br />
function(_sourceFunctionReturnValue:String):void<br />
{</p>
<p>myTextInput.text = _sourceFunctionReturnValue;<br />
},<br />
&#8220;myTextInput.text&#8221;);<br />
&#8230;<br />
}<br />
[/as]<br />
Quem quiser entender o que faz cada linha do trecho de código acima<br />
pode  olhar no código fonte da classe mx.binding. Binding. Mas em<br />
resumo, é este  trecho de código que pega o valor de &#8220;myProp&#8221; toda vez<br />
que ele mudar e copia  para &#8220;myTextInput.text&#8221;.</p>
<p>Bom pessoal espero que essa explicação dada pelo nosso amigo Beck Novaes  possa ser tão esclarecedora pra voces o quanto foi pra mim&#8230;</p>
<p>Abraços&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexdev.com.br/home/a-magica-do-bindable/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

