<?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>José Carlos Fiel &#187; Fiel Cookbook</title>
	<atom:link href="http://blog.josecarlosfiel.com.br/tag/fiel-cookbook/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.josecarlosfiel.com.br</link>
	<description></description>
	<lastBuildDate>Thu, 05 Aug 2010 21:31:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>[Fiel Cookbook] Manipulando Datas entre Flex e PHP</title>
		<link>http://blog.josecarlosfiel.com.br/fiel-cookbook-manipulando-datas-entre-flex-e-php/</link>
		<comments>http://blog.josecarlosfiel.com.br/fiel-cookbook-manipulando-datas-entre-flex-e-php/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 19:38:08 +0000</pubDate>
		<dc:creator>José Carlos Silveira Fiel</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Fiel Cookbook]]></category>
		<category><![CDATA[Zend Amf]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.josecarlosfiel.com.br/?p=362</guid>
		<description><![CDATA[ 
			
				
			
		
Problema
Temos um DateField no Flex e queremos enviar a data selecionada para o PHP como um objeto Date e não somente uma simples string no fomato DD/MM/YYYY. Enviando o objeto Date, teremos o benefício de ter todas as informações de Timezone, GMT e etc para serem manipuladas futuramente via backend.

Solução
Para resolvermos nosso problema, devemos]]></description>
			<content:encoded><![CDATA[<div style="float:right;margin:0px 0px 0px 0px;"><a href="http://www.google.com/reader/link?url=http://blog.josecarlosfiel.com.br/fiel-cookbook-manipulando-datas-entre-flex-e-php/&title=[Fiel Cookbook] Manipulando Datas entre Flex e PHP&srcTitle=José Carlos Fiel&srcURL=http://blog.josecarlosfiel.com.br"target="_blank" rel=""><img border="0" src="http://blog.josecarlosfiel.com.br/wp-content/plugins/wp-google-buzz/icon/9.png" style="opacity:1;filter:alpha(opacity=100)" onmouseover="this.style.opacity=0.8;this.filters.alpha.opacity=80" onmouseout="this.style.opacity=1;this.filters.alpha.opacity=100"/> </a></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.josecarlosfiel.com.br%2Ffiel-cookbook-manipulando-datas-entre-flex-e-php%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.josecarlosfiel.com.br%2Ffiel-cookbook-manipulando-datas-entre-flex-e-php%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<h2><strong>Problema</strong></h2>
<p style="text-align: justify;">Temos um DateField no Flex e queremos enviar a data selecionada para o PHP como um objeto Date e não somente uma simples string no fomato DD/MM/YYYY. Enviando o objeto Date, teremos o benefício de ter todas as informações de Timezone, GMT e etc para serem manipuladas futuramente via backend.</p>
<p style="text-align: justify;">
<h2>Solução</h2>
<p style="text-align: justify;">Para resolvermos nosso problema, devemos utilizar o Zend Amf para serialização/deserialização de objetos entre Flex e PHP. No Flex simplesmente usaremos a propriedade <strong>selectedDate </strong>do DateField para selecionarmos o objeto Date e após enviar ao PHP via RemoteObject. O Zend Amf terá o papel de converter este objeto para Zend Date e vice versa.</p>
<p style="text-align: justify;">
<h2>Explicação Detalhada</h2>
<p style="text-align: justify;"><em>Obs.:  O ViewSource está habilitado no exemplo abaixo para quem quiser  acompanhar melhor esta explicação.<br />
</em></p>
<p>1º &#8211; Capturamos o objeto Date pela propriedade <strong>selectedDate </strong>do DateField e enviamos para o PHP.</p>
<p><strong>FlexPHPDate.mxml</strong></p>
<div class="codecolorer-container mxml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br /></div></td><td><div class="mxml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">&lt;?xml version=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #7400FF;">&gt;</span></span><br />
<span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Application</span> xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> viewSourceURL=<span style="color: #ff0000;">&quot;srcview/index.html&quot;</span><span style="color: #7400FF;">&gt;</span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;mx:Script&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp;&lt;![CDATA[</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;import mx.controls.Alert;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;import mx.rpc.events.FaultEvent;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;import mx.rpc.events.ResultEvent;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public function getTimezone():void</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;remote.getTimezone(dt.selectedDate);</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</span><br />
<br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public function getTimestamp():void</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;remote.getTimestamp(dt.selectedDate);</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;protected function remote_resultHandler(event:ResultEvent):void</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Alert.show(event.result.toString());</span><br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</span><br />
<br />
<span style="color: #339933;"> &nbsp; &nbsp; &nbsp; &nbsp;]]&gt;</span><br />
<span style="color: #339933;"> &nbsp; &nbsp;&lt;/mx:Script&gt;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:DateField</span> id=<span style="color: #ff0000;">&quot;dt&quot;</span> formatString=<span style="color: #ff0000;">&quot;DD/MM/YYYY&quot;</span> <span style="color: #7400FF;">/&gt;</span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Button</span> label=<span style="color: #ff0000;">&quot;Get Timezone&quot;</span> click=<span style="color: #ff0000;">&quot;getTimezone()&quot;</span> enabled=<span style="color: #ff0000;">&quot;{ dt.selectedDate != null }&quot;</span> <span style="color: #7400FF;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:Button</span> label=<span style="color: #ff0000;">&quot;Get UNIX timestamp&quot;</span> click=<span style="color: #ff0000;">&quot;getTimestamp()&quot;</span> enabled=<span style="color: #ff0000;">&quot;{ dt.selectedDate != null }&quot;</span> <span style="color: #7400FF;">/&gt;</span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000;"><span style="color: #7400FF;">&lt;mx:RemoteObject</span> id=<span style="color: #ff0000;">&quot;remote&quot;</span> destination=<span style="color: #ff0000;">&quot;zend&quot;</span> endpoint=<span style="color: #ff0000;">&quot;../gateway.php&quot;</span> </span><br />
<span style="color: #000000;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; source=<span style="color: #ff0000;">&quot;DateService&quot;</span></span><br />
<span style="color: #000000;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result=<span style="color: #ff0000;">&quot;remote_resultHandler(event)&quot;</span><span style="color: #7400FF;">/&gt;</span></span><br />
&nbsp; &nbsp; <br />
<span style="color: #000000;"><span style="color: #7400FF;">&lt;/mx:Application</span><span style="color: #7400FF;">&gt;</span></span></div></td></tr></tbody></table></div>
<p>2º &#8211; Recebemos o objeto Date no PHP já convertido para Zend_Date. Isso é feito automaticamente pelo Zend_Amf.</p>
<p><strong>DateService.php (está localizando dentro da pasta /services/)</strong></p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000000; font-weight: bold;">class</span> DateService<br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getTimezone<span style="color: #009900;">&#40;</span>Zend_Date <span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$date</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getTimezone</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getTimestamp<span style="color: #009900;">&#40;</span>Zend_Date <span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$date</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getTimestamp</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p><iframe style="width: 100%; height: 300px;" border="0" src="http://www.josecarlosfiel.com.br/projetos/flex/FlexPHPDate/bin-release/FlexPHPDate.html"></iframe></p>
<p style="text-align: center;"><em>Exemplo  da Solução: Ao selecionarmos a data e selecionando Get Timezone, mandaremos para o PHP o objeto Date e após o PHP enviará para nós um timestamp desta data atravéz do Zend_Date. Acontece o mesmo para Get UNIX Timestamp.</em></p>
<p style="text-align: left;"><em><strong>Baixe aqui o projeto Flex incluindo o PHP: </strong></em><a href="http://www.josecarlosfiel.com.br/projetos/flex/FlexPHPDate.zip">FlexPHPDate.zip</a><em><br />
</em></p>
<p style="text-align: center;">
<h2>Observações Finais</h2>
<p style="text-align: justify;">Esta prática é interessante para manipularmos o mesmo objeto Date de uma linguagem para outra, com várias informações de Timezone, GMT e etc, como citados acima.</p>
<p>Abraços a todos e até o próximo Fiel Cookbook.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.josecarlosfiel.com.br/fiel-cookbook-manipulando-datas-entre-flex-e-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[Fiel Cookbook] Resolvendo problema com Scroll em Apps Flex usando MacOSX</title>
		<link>http://blog.josecarlosfiel.com.br/fiel-cookbook-resolvendo-problema-com-scroll-em-apps-flex-usando-macosx/</link>
		<comments>http://blog.josecarlosfiel.com.br/fiel-cookbook-resolvendo-problema-com-scroll-em-apps-flex-usando-macosx/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 03:22:04 +0000</pubDate>
		<dc:creator>José Carlos Silveira Fiel</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Fiel Cookbook]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[mousewheel]]></category>
		<category><![CDATA[Scroll]]></category>

		<guid isPermaLink="false">http://blog.josecarlosfiel.com.br/?p=345</guid>
		<description><![CDATA[ 
			
				
			
		
Problema
Você está usando o sistema operacional MacOSX e deseja que o scroll do mouse (mousewheel) funcione em suas aplicacões Flex.

Exemplo do Problema: Tente fazer a rolagem no DataGrid. Não será possível.

Solução
Use o projeto MouseWheelEnabler para resolver o problema existente. Você pode obte-lo pelo site http://code.google.com/p/flex-wmode-mousewheel-handler-example/ ou visualizar a classe no view source do exemplo]]></description>
			<content:encoded><![CDATA[<div style="float:right;margin:0px 0px 0px 0px;"><a href="http://www.google.com/reader/link?url=http://blog.josecarlosfiel.com.br/fiel-cookbook-resolvendo-problema-com-scroll-em-apps-flex-usando-macosx/&title=[Fiel Cookbook] Resolvendo problema com Scroll em Apps Flex usando MacOSX&srcTitle=José Carlos Fiel&srcURL=http://blog.josecarlosfiel.com.br"target="_blank" rel=""><img border="0" src="http://blog.josecarlosfiel.com.br/wp-content/plugins/wp-google-buzz/icon/9.png" style="opacity:1;filter:alpha(opacity=100)" onmouseover="this.style.opacity=0.8;this.filters.alpha.opacity=80" onmouseout="this.style.opacity=1;this.filters.alpha.opacity=100"/> </a></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.josecarlosfiel.com.br%2Ffiel-cookbook-resolvendo-problema-com-scroll-em-apps-flex-usando-macosx%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.josecarlosfiel.com.br%2Ffiel-cookbook-resolvendo-problema-com-scroll-em-apps-flex-usando-macosx%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<h2><strong>Problema</strong></h2>
<p style="text-align: justify;">Você está usando o sistema operacional MacOSX e deseja que o scroll do mouse (mousewheel) funcione em suas aplicacões Flex.</p>
<p><iframe style="width: 100%; height: 300px;" border="0" src="http://www.josecarlosfiel.com.br/projetos/flex/mousewheelenabler/NoMouseWheelEnablerExample.html"></iframe></p>
<p style="text-align: center;"><em>Exemplo do Problema: Tente fazer a rolagem no DataGrid. Não será possível.</em></p>
<p style="text-align: justify;">
<h2>Solução</h2>
<p style="text-align: justify;">Use o projeto MouseWheelEnabler para resolver o problema existente. Você pode obte-lo pelo site <a href="http://code.google.com/p/flex-wmode-mousewheel-handler-example/" target="_blank">http://code.google.com/p/flex-wmode-mousewheel-handler-example/</a> ou visualizar a classe no view source do exemplo logo abaixo.</p>
<h2>Explicação Detalhada</h2>
<p style="text-align: justify;"><em>Obs.: O ViewSource está habilitado no exemplo abaixo para quem quiser acompanhar melhor esta explicação.</em></p>
<p>Seguindo o exemplo do site oficial, apenas adicionamos no evento addToStage de sua Application a função initMouseWheel que inicializará a classe MouseWheelEnabler. Feito isso sua aplicação funcionará perfeitamente como no exemplo abaixo:</p>
<p><iframe style="width: 100%; height: 300px;" border="0" src="http://www.josecarlosfiel.com.br/projetos/flex/mousewheelenabler/MouseWheelEnablerExample.html"></iframe></p>
<p style="text-align: center;"><em>Exemplo da Solução: Adicionando a classe MouseWheelEnabler resolvemos nosso problema de scroll em aplicações Flex no sistema operacional MacOSX.</em></p>
<p style="text-align: center;">
<h2>Observações Finais</h2>
<p style="text-align: justify;">Esta solução resolve nossos problemas imediatamente, claro que não podemos dizer que ela seja definitiva, sendo assim que em breve poderemos ter uma correção por parte da Adobe.<br />
Outro detalhe que devemos considerar, é que o Mouse Mighty possui scroll horizontal, sendo que nesta classe ela não resolve  o problema para este caso.</p>
<p>Abraços a todos e até o próximo Fiel Cookbook.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.josecarlosfiel.com.br/fiel-cookbook-resolvendo-problema-com-scroll-em-apps-flex-usando-macosx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Fiel Cookbook] Previnindo que DataGrids aceitam itens de outros DataGrids</title>
		<link>http://blog.josecarlosfiel.com.br/fiel-cookbook-previnindo-que-datagrids-aceitam-itens-de-outros-datagrids/</link>
		<comments>http://blog.josecarlosfiel.com.br/fiel-cookbook-previnindo-que-datagrids-aceitam-itens-de-outros-datagrids/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 01:18:47 +0000</pubDate>
		<dc:creator>José Carlos Silveira Fiel</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Fiel Cookbook]]></category>
		<category><![CDATA[Imersão Adobe Flex]]></category>

		<guid isPermaLink="false">http://blog.josecarlosfiel.com.br/?p=267</guid>
		<description><![CDATA[ 
			
				
			
		
Problema
Você quer classificar itens (arrastando-os para cima e para baixo) de um DataGrid e evitar que outros componentes baseados na classe ListBase (DataGrid, List, Tree, etc.) aceitem estes itens.

Exemplo do Problema: Arraste um item do DataGrid do painel Itens para o DataGrid do painel Categorias. Terá um efeito de mover itens de um DataGrid]]></description>
			<content:encoded><![CDATA[<div style="float:right;margin:0px 0px 0px 0px;"><a href="http://www.google.com/reader/link?url=http://blog.josecarlosfiel.com.br/fiel-cookbook-previnindo-que-datagrids-aceitam-itens-de-outros-datagrids/&title=[Fiel Cookbook] Previnindo que DataGrids aceitam itens de outros DataGrids&srcTitle=José Carlos Fiel&srcURL=http://blog.josecarlosfiel.com.br"target="_blank" rel=""><img border="0" src="http://blog.josecarlosfiel.com.br/wp-content/plugins/wp-google-buzz/icon/9.png" style="opacity:1;filter:alpha(opacity=100)" onmouseover="this.style.opacity=0.8;this.filters.alpha.opacity=80" onmouseout="this.style.opacity=1;this.filters.alpha.opacity=100"/> </a></div><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.josecarlosfiel.com.br%2Ffiel-cookbook-previnindo-que-datagrids-aceitam-itens-de-outros-datagrids%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.josecarlosfiel.com.br%2Ffiel-cookbook-previnindo-que-datagrids-aceitam-itens-de-outros-datagrids%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<h2><strong>Problema</strong></h2>
<p style="text-align: justify;">Você quer classificar itens (arrastando-os para cima e para baixo) de um DataGrid e evitar que outros componentes baseados na classe ListBase (DataGrid, List, Tree, etc.) aceitem estes itens.</p>
<p><iframe style="width: 100%; height: 300px;" border="0" src="http://www.josecarlosfiel.com.br/projetos/flex/sortable_items_datagrids_sample_bad/BadSortableItemsDataGrids.html"></iframe></p>
<p style="text-align: center;"><em>Exemplo do Problema: Arraste um item do DataGrid do painel Itens para o DataGrid do painel Categorias. Terá um efeito de mover itens de um DataGrid para outro, algo que não queremos que aconteça.</em></p>
<p style="text-align: justify;">
<h2>Solução</h2>
<p style="text-align: justify;">Criar um componente DataGrid personalizado, setando as propriedades dragEnable, dropEnable e dragMoveEnable como TRUE e sobrescrever os métodos addDragData, dragEnterHandler, dragOverHandler, dragExitHandler, dragDropHandler da classe ListBase, para definir nosso próprio formato de dados que é definido pela classe DragSource.</p>
<p style="text-align: justify;">
<h2>Explicação Detalhada</h2>
<p style="text-align: justify;"><em>Obs.: O ViewSource está habilitado no exemplo abaixo para quem quiser acompanhar melhor esta explicação.</em></p>
<p style="text-align: justify;">Por padrão todos os componentes baseados na classe ListBase tem implementado um Drag and Drop. É definido também pela classe DragSource o formato de dados chamado &#8220;items&#8221;. Isso é uma espécie de controle de dados que estão sendo arrastados, ou seja, se o componente alvo esperado não possuir este formato, não será possível fazer um Drop destes dados. A ListBase trata o formato dos dados arrastados via drag and drop como &#8220;items&#8221;, então todos os componentes baseados nesta classe terão este formato.</p>
<p style="text-align: justify;">Para alteramos isso, vamos sobrescrever os métodos addDragData, dragEnterHandler, dragOverHandler, dragExitHandler, dragDropHandler que contém uma validação dizendo se tem o formato como &#8220;items&#8221; para aceitar o Drop no componente alvo.</p>
<p style="text-align: justify;">Criando um novo componente DataGrid personalizado, entre na classe ListBase e simplesmente copie os métodos acima para mantermos as mesmas funcionalidades. Não esqueça de importar as classes necessárias e o namespace mx_internal requerido para algumas variáveis que contém dentro dos métodos que estamos sobrescrevendo.</p>
<p style="text-align: justify;">Feito isso vamos criar uma propriedade privada para este componente personalizado chamado <em>format </em>do tipo String e com valor de &#8220;items&#8221;. Em seguida criaremos um getter e setter para a propriedade recém criada. Agora substitui todas as strings &#8220;items&#8221; dentro dos métodos que copiamos da classe ListBase pelo método getter <em>format</em>, esse que será dinâmico quando utilizarmos nosso componente e poder definir o formato de dados a serem arrastados por cada componente instanciado.</p>
<p style="text-align: justify;">Por último vamos definir no componente personalizado as propriedades dragEnable, dropEnable, dragMoveEnable como TRUE, para ativamos o drag and drop do nosso componente DataGrid e podermos mover os itens que queremos classificar.</p>
<p style="text-align: justify;">Então em nossa aplicação incluimos nossos DataGrids personalizados e podemos setar a propriedade format com qualquer valor para referenciar aquele fomato para aquela instancia de DataGrid, ou seja, qualquer outro componente baseado no ListBase não poderá colocar seus itens dentro do seu DataGrid. Vejamos aplicação final com o viewSource habilitado:</p>
<p><iframe style="width: 100%; height: 300px;" border="0" src="http://www.josecarlosfiel.com.br/projetos/flex/sortable_items_datagrids/SortableItemsDataGrids.html"></iframe></p>
<p style="text-align: center;"><em>Exemplo da Solução: Nosso DataGrid contendo os Itens agora possui um format chamado &#8220;dgItens&#8221; e o DataGrid contendo as categorias agora possui um format chamado &#8220;dgCategoria&#8221;, sendo que não pode ser aceito em outros componentes baseados no ListBase com format &#8220;items&#8221;, apenas em componentes que possuirão seus formatos definidos. Assim temos a solução final que é classificar os itens, arrastandos para cima e para baixo dentro do seu DataGrid sem que o item arrastado seja aceito por outros componentes.</em></p>
<p style="text-align: center;">
<h2>Observações Finais</h2>
<p style="text-align: justify;">Este post foi baseado num problema que tivemos que solucionar nesta manhã. Posso dizer que boa parte dessa solução devo ao curso <a href="http://egenial.com.br/imersao-flex/index.html" target="_blank">Imersão Flex</a>. Como pode ver procurei entender os métodos relacionados ao Drag and Drop do ListBase e usei eles próprios para customizar o meu componente e solucionar o meu problema rapidamente. Se existe outras formas mais simples não sei, podem deixar comentários aqui, mas esta solução foi a única que venho em mente no momento. Então não se limitem e sim faça sua imersão em seus componentes Flex e procure entender como eles funcionam, certamente você encontrará a sua solução.</p>
<p>Abraços a todos e até o próximo Fiel Cookbook.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.josecarlosfiel.com.br/fiel-cookbook-previnindo-que-datagrids-aceitam-itens-de-outros-datagrids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
