<?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>TSW - That Should Work Blog &#187; re-uso</title>
	<atom:link href="http://blog.msdevstudio.net/tag/re-uso/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.msdevstudio.net</link>
	<description>Flash, Flex, Web e Aplicações Ricas para Internet!</description>
	<lastBuildDate>Tue, 07 Feb 2012 18:30:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Flex/AS3 &#8211; Truques e Dicas #8 &#8211; Re-use o código!</title>
		<link>http://blog.msdevstudio.net/2009/04/09/flexas3-truques-dicas-8-re-use-o-codigo/</link>
		<comments>http://blog.msdevstudio.net/2009/04/09/flexas3-truques-dicas-8-re-use-o-codigo/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 13:33:01 +0000</pubDate>
		<dc:creator>Mário Santos</dc:creator>
				<category><![CDATA[Action Script & MXML]]></category>
		<category><![CDATA[Air]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Certificaçao Flex]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA's Geral]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[action script 3]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[boas praticas]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[handle]]></category>
		<category><![CDATA[optimização]]></category>
		<category><![CDATA[re-uso]]></category>

		<guid isPermaLink="false">http://msdevstudio.com/blog/?p=967</guid>
		<description><![CDATA[Outro dos bons exemplos que se podem fazer ao criar uma aplicação usando actionscript 3 é a utilização do código, num dos simples exemplos vou mostrar como podemos usar apenas uma função para lidar com 4 ou mais eventos&#8230;e de tipos diferentes! Na minha aplicação, tinha a necessidade de adicionar alguns eventos (inicialmente do rato) [...]]]></description>
			<content:encoded><![CDATA[<p>Outro dos bons exemplos que se podem fazer ao criar uma aplicação usando actionscript 3 é a utilização do código, num dos simples exemplos vou mostrar como podemos usar apenas uma função para lidar com 4 ou mais eventos&#8230;e de tipos diferentes!</p>
<p>Na minha aplicação, tinha a necessidade de adicionar alguns eventos (inicialmente do rato) a um elemento e lidar com os mesmos, muita gente faria, por exemplo ao lidar com 4 eventos do rato numa dataGrid:</p>
<p>[coolcode]<br />
dg.addEventListener(MouseEvent.CLICK, onClick);<br />
dg.addEventListener(MouseEvent.MOUSE_WHEEL onMouseWheel);<br />
dg.addEventListener(MouseEvent.ROLL_OVER, onRollOver);<br />
dg.addEventListener(MouseEvent.ROLL_OUT, onRollOut);<br />
[/coolcode]</p>
<p>O que neste caso teriamos que usar 4 funções diferentes: <strong>onClick</strong>, <strong>onDoubleClick</strong>, <strong>onRollOver</strong>, <strong>onRollOut</strong> do estilo:<br />
[coolcode]<br />
private function onClick(evt:MouseEvent):void { }<br />
private function onMouseWheel(evt:MouseEvent):void { }<br />
private function onRollOver(evt:MouseEvent):void { }<br />
private function onRollOut(evt:MouseEvent):void { }<br />
[/coolcode]</p>
<p>É facil compreender que muita gente use esta forma (eu já usei), mas existe uma forma mais pratica, uma vez que todos os eventos são MouseEvent, podemos fazer apenas uma função:<br />
[coolcode]<br />
dg.addEventListener(MouseEvent.CLICK, onDGMouse);<br />
dg.addEventListener(MouseEvent.MOUSE_WHEEL, onDGMouse);<br />
dg.addEventListener(MouseEvent.ROLL_OVER, onDGMouse);<br />
dg.addEventListener(MouseEvent.ROLL_OUT, onDGMouse);<br />
[/coolcode]<br />
<span id="more-967"></span><br />
e construir apenas uma função em vez de 4, fazend o uso de comparação do tipo de evento:<br />
[coolcode]<br />
private function onDGMouse(evt:MouseEvent):void {<br />
		  switch(evt.type) {<br />
				case MouseEvent.CLICK:<br />
				trace(&#8220;Evento click: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.MOUSE_WHEEL:<br />
				trace(&#8220;Evento roda do rato: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.ROLL_OVER:<br />
				trace(&#8220;Evento Roll Over: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.ROLL_OUT:<br />
				trace(&#8220;Evento Roll Out: &#8220;+evt.type);<br />
				break;</p>
<p>				default:<br />
				Alert.show(&#8220;Evento detectado, nenhuma função associada!: &#8220;+evt.type);<br />
				break;<br />
		   }</p>
<p>		}<br />
[/coolcode]</p>
<p>Como podem ver simplificamos o trabalho e ficamos com o código mais organizado, mas ainda podemos alargar esta função a mais eventos, aliás, a todos os eventos do rato, mas não só&#8230; se mudarmos a declaração da função de<br />
[coolcode]<br />
private function onDGMouse(evt:MouseEvent)<br />
[/coolcode]<br />
para<br />
[coolcode]<br />
private function onDGMouse(evt:*)<br />
[/coolcode]<br />
A nossa função passa a poder receber qualquer tipo de evento, se bem que nem todos os programadores são de acordo em usar este tipo de função &#8220;handler&#8221; de multi-eventos, a verdade é que muitas vezes reduzimos o código em dezenas de linhas e o colocamos bem mais legil, ora vejam como além dos eventos do rato, a mesma função passa a poder receber e lidar com DragEvent&#8217;s ou DataGridEvent&#8217;s:<br />
[coolcode]<br />
private function onDGMouse(evt:*):void {<br />
		  switch(evt.type) {<br />
				case MouseEvent.CLICK:<br />
				trace(&#8220;Evento click: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.MOUSE_WHEEL:<br />
				trace(&#8220;Evento roda do rato: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.ROLL_OVER:<br />
				trace(&#8220;Evento Roll Over: &#8220;+evt.type);<br />
				break;</p>
<p>				case MouseEvent.ROLL_OUT:<br />
				trace(&#8220;Evento Roll Out: &#8220;+evt.type);<br />
				break;</p>
<p>				case DataGridEvent.COLUMN_STRETCH:<br />
				trace(&#8220;Evento DG :&#8221;+evt.type);<br />
				break;</p>
<p>				case DragEvent.DRAG_ENTER:<br />
				trace(&#8220;Evento DRAG :&#8221;+evt.type);<br />
				break;</p>
<p>				default:<br />
				Alert.show(&#8220;Evento &#8220;+evt.type+&#8221;detectado, nenhuma instrução associada!: &#8220;);<br />
				break;<br />
		   }</p>
<p>		}<br />
[/coolcode]<br />
Neste momento podemos dizer que esta função é valida para lidar com quase qualquer evento, vejam 3 eventos completamente diferentes a usarem a mesma função de &#8220;event handle&#8221;:<br />
[coolcode]<br />
dg.addEventListener(MouseEvent.CLICK, onDGMouse);<br />
dg.addEventListener(DataGridEvent.COLUMN_STRETCH, onDGMouse);<br />
dg.addEventListener(DragEvent.DRAG_ENTER, onDGMouse);<br />
[/coolcode]</p>
<p>Como devem imaginar, pode ser, e é, muito util!!</p>
<p>Abraço.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.msdevstudio.net/2009/04/09/flexas3-truques-dicas-8-re-use-o-codigo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

