<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<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/"
	>

<channel>
	<title>Luis Carlos Quinhone -Designer / Developer</title>
	<link>http://www.flexbuilder.direciona.com</link>
	<description>Artigos e traduções sobre o Flex Builder, Ruby on Rails, Lumine, PHP</description>
	<pubDate>Thu, 29 Oct 2009 23:34:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>Casa Própria - Sem juros e sem burocracia. A partir de R$ 35,00 mensais!</title>
		<link>http://www.flexbuilder.direciona.com/?p=58</link>
		<comments>http://www.flexbuilder.direciona.com/?p=58#comments</comments>
		<pubDate>Thu, 29 Oct 2009 23:27:45 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[AFTB]]></category>

		<category><![CDATA[Casa Própria]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=58</guid>
		<description><![CDATA[Conheça o maior Programa Social de Financiamento da Casa Própria do Brasil. Aprovado pelo Governo Federal, desde 2007, já atende a mais de 30 mil brasileiros.



Veja alguns dos Benefícios:

Sem juros;
Sem entrada;
Sem comprovação de renda;
Financiamento em até 30 anos;
Sem consulta ao SPC ou Serasa;
Financiamento de 100% do imóvel;
Créditos de R$ 35 mil a R$ 500 mil.

A [...]]]></description>
			<content:encoded><![CDATA[<p><span class="Apple-style-span" style="font-family: Tahoma, Tahoma, Geneva, sans-serif; font-size: 14px; line-height: 24px; font-weight: bold">Conheça o maior Programa Social de Financiamento da Casa Própria do Brasil. Aprovado pelo Governo Federal, desde 2007, já atende a mais de 30 mil brasileiros.</span><object height="344" width="425">
<param value="http://www.youtube.com/v/k1Knspc3iBc&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=pt-br&amp;feature=player_embedded&amp;fs=1" name="movie"></param>
<param value="true" name="allowFullScreen"></param>
<param value="always" name="allowScriptAccess"></param><embed src="http://www.youtube.com/v/k1Knspc3iBc&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=pt-br&amp;feature=player_embedded&amp;fs=1" height="344" width="425" allowscriptaccess="always" allowfullscreen="true" type="application/x-shockwave-flash"></embed></object><span class="Apple-style-span" style="font-family: verdana, sans-serif; font-size: 12px; line-height: normal; white-space: nowrap"></span><br />
<h3 class="style48" style="font-family: Tahoma, Geneva, sans-serif; font-size: 14px; padding: 0px; margin: 0px">Veja alguns dos Benefícios:</h3>
<ul style="padding-left: 16px; line-height: 28px">
<li>Sem juros;</li>
<li>Sem entrada;</li>
<li>Sem comprovação de renda;</li>
<li>Financiamento em até 30 anos;</li>
<li>Sem consulta ao SPC ou Serasa;</li>
<li>Financiamento de 100% do imóvel;</li>
<li>Créditos de R$ 35 mil a R$ 500 mil.</li>
</ul>
<p style="padding-top: 2px; padding-right: 5px; padding-bottom: 2px; padding-left: 5px; text-align: justify; margin: 0px"><strong>A Casa Própria agora ao Seu Alcance!</strong></p>
<p style="padding-top: 2px; padding-right: 5px; padding-bottom: 2px; padding-left: 5px; text-align: justify; margin: 0px">&nbsp;</p>
<p style="padding-top: 2px; padding-right: 5px; padding-bottom: 2px; padding-left: 5px; text-align: justify; margin: 0px"><span class="Apple-style-span" style="font-family: Tahoma, Geneva, sans-serif; font-size: 14px" inscreva.php?indicador="013860" target="_blank" title="Casa Própria - AFTB">http://www.aftbrasil.org.br/inscreva.php?indicador=013860</span></p>
<p style="padding-top: 2px; padding-right: 5px; padding-bottom: 2px; padding-left: 5px; text-align: justify; margin: 0px"><span class="Apple-style-span" style="font-family: Tahoma, Geneva, sans-serif; font-size: 14px" inscreva.php?indicador="013860" target="_blank" title="Casa Própria - AFTB"><a href="http://www.aftbrasil.org.br/inscreva.php?indicador=013860" target="_blank" title="Casa Própria - AFTB"></a>Para mais informações acesse: <a href="http://www.quinhone.com" target="_blank" title="Casa Própria - AFTB">http://www.quinhone.com</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=58</wfw:commentRss>
		</item>
		<item>
		<title>Iniciando com Flex e PHP usando WebORB</title>
		<link>http://www.flexbuilder.direciona.com/?p=57</link>
		<comments>http://www.flexbuilder.direciona.com/?p=57#comments</comments>
		<pubDate>Sun, 30 Nov 2008 19:06:57 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[WebORB]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Flex / Flex Builder]]></category>

		<category><![CDATA[Flex Builder]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=57</guid>
		<description><![CDATA[WebORB para PHP fornece uma implementação para Flex Remoting e Flex Messaging. Usando WebORB, desenvolvedores PHP podem integrar aplicações clientes Flex com objetos implantados em aplicações PHP. Além disso, WebORB para PHP pode funcionar como um gateway suportando assim aplicações flash cliente.
Iniciando – Instalação WebORB
A instalação do WebORB para PHP tem a seguinte estrutura de [...]]]></description>
			<content:encoded><![CDATA[<p>WebORB para PHP fornece uma implementação para Flex Remoting e Flex Messaging. Usando WebORB, desenvolvedores PHP podem integrar aplicações clientes Flex com objetos implantados em aplicações PHP. Além disso, WebORB para PHP pode funcionar como um gateway suportando assim aplicações flash cliente.</p>
<h3>Iniciando – Instalação WebORB</h3>
<p>A instalação do WebORB para PHP tem a seguinte estrutura de diretórios:</p>
<p><img src="http://direciona.com/flexbuilder/imagens/estrutura-de-diretorio-weborb.jpg" alt="Iniciando – Instalação WebORB" title="Iniciando – Instalação WebORB" /></p>
<p>Se estiver distribuindo de um computador Windows com IIS conceda permissão ler/escrever para a conta IUSR_&lt; machinename&gt; para a pasta Weborb.<br />
Você pode verificar se a instalação do WebORB está correta no Management Console incluída com a distribuição WebORB. Abra http://localhost/caminho de instalação do weborb no navegador.Quando a console é carregado, você pode inspecionar o serviços remoto PHP através da aba Management ou executar os exemplos incluído com o produto.</p>
<h3>Flex Builder Setup</h3>
<p>Para criar um projeto Flex Builder para trabalhar com WebORB e PHP, siga as instruções do presente artigo ou observe o screencast (tem um em português feito pelo Ved - <a target="_blank" href="http://www.vedovelli.com.br">http://www.vedovelli.com.br</a>).</p>
<h3>Flex Application Code</h3>
<p>A distribuição do WebORB para PHP contém alguns projetos Flex acabados demonstrando a conectividade e um remoting invocation. Copie e cole o conteúdo do exemplo.mxml localizado em \Exemplos\SampleApp\no mxml criado no Flex Builder. O código da aplicação faz uma conexão com um objeto PHP e retorna algumas informações básicas sobre o computador onde o objeto estiver em funcionamento.</p>
<p>A fim de comunicar com um objeto PHP remoto, O Flex utiliza a API RemoteObject para criar um remoting proxy:</p>
<p><font size="2" color="#808000" face="Courier New">remoteObject = new RemoteObject();<br />
remoteObject.destination = &#8220;InfoServiceDestination&#8221;;<br />
remoteObject.getComputerInfo.addEventListener(&#8221;result&#8221;,onResult);<br />
remoteObject.addEventListener(&#8221;fault&#8221;, onFault);</font></p>
<p>Note que o nome de destino verifica o destino colocado no remoting-config.xml. Quando um usuário clica no botão &#8216;Get Computer Info&#8217;, a seguinte função executa um método remoto:</p>
<p><font size="2" color="#808000" face="Courier New">private function getInfo():void<br />
{<br />
  invokeButton.enabled = false;<br />
  currentUserText.text = &#8220;&#8221;;<br />
  processIdText.text = &#8220;&#8221;;<br />
  osText.text = &#8220;&#8221;;<br />
  phpVersionText.text = &#8220;&#8221;;<br />
  remoteObject.getComputerInfo();<br />
} </font></p>
<p>Quando uma resposta invocada está disponível, o Flex invoca uma resposta handler especificada na tag &lt;RemoteObject&gt;. A resposta handler no exemplo, preenche os campos de texto com os dados disponíveis no objeto retornado:</p>
<p><font size="2" color="#808000" face="Courier New">private function onResult(event:ResultEvent):void<br />
{<br />
  var computerInfo:Object = event.result;<br />
  currentUserText.text = computerInfo.currentUser;<br />
  processIdText.text = computerInfo.phpProcessId;<br />
  osText.text = computerInfo.operatingSystem;<br />
  phpVersionText.text = computerInfo.phpVersion;<br />
  invokeButton.enabled = true;<br />
} </font></p>
<h3>Código PHP</h3>
<p>O código fonte para a classe PHP server-side está abaixo:</p>
<p><font size="2" color="#808000" face="Courier New">class InfoService<br />
{<br />
  public function getComputerInfo()<br />
  {<br />
    $compInfo = new ComputerInfo();<br />
    $compInfo-&gt;currentUser = get_current_user();<br />
    $compInfo-&gt;phpProcessId = getmypid();<br />
    $compInfo-&gt;operatingSystem = php_uname( &#8216;a&#8217; );<br />
    $compInfo-&gt;phpVersion = phpversion();<br />
    return $compInfo;<br />
  }<br />
}<br />
class ComputerInfo<br />
{<br />
  public $currentUser;<br />
  public $phpProcessId;<br />
  public $operatingSystem;<br />
  public $phpVersion;<br />
}</font></p>
<h3>Distribuindo</h3>
<p><strong><font color="#ff0000">IMPORTANTE</font></strong> Garanta a localização do diretório onde o Flex Builder copia a aplicação cliente compilada. É muito importante importar uma cópia do weborb.php no mesmo diretório.<br />
weborb.php deve conter os seguintes códigos PHP:</p>
<p><font size="2" color="#808000" face="Courier New">&lt;?php <br />
   require_once(&#8221;../Weborb/ORBHttpHandler.php&#8221;);<br />
   $m_ORBHttpHandler = new ORBHttpHandler();<br />
   $m_ORBHttpHandler-&gt;processRequest();<br />
?&gt;</font></p>
<p><strong><font color="#ff0000">MUITO IMPORTANTE:</font></strong> A primeira linha deve ser editada para apontar ao diretório Weborb da distribuição do produto. Por exemplo, vejam weborb.php localizado na pasta /Console.</p>
<h3>Executando Aplicação Flex</h3>
<p>Neste momento a aplicação Flex está pronta para funcionar. Você pode usar o Flex Builder para executar a aplicação.</p>
<p>Nota: Tradução feita a partir do original inglês em: <a target="_blank" href="http://www.themidnightcoders.com/products/weborb-for-php/developer-den/technical-articles/getting-started-with-weborb-for-php.html">http://www.themidnightcoders.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=57</wfw:commentRss>
		</item>
		<item>
		<title>Guia de ActionScript 3.0 em portugu&#234;s&#8230; ufaa! J&#225; era sem tempo.</title>
		<link>http://www.flexbuilder.direciona.com/?p=56</link>
		<comments>http://www.flexbuilder.direciona.com/?p=56#comments</comments>
		<pubDate>Mon, 17 Nov 2008 12:58:41 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Flex / Flex Builder]]></category>

		<category><![CDATA[Flex Builder]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=56</guid>
		<description><![CDATA[ Olá pessoal, finalmente resolveram ter dó dos brasileiros e disponibilizaram o Guia de ActionScript 3.0 em Português, espero que atrás desse venham muitos outros, principalmente de Flex.
Segue o link para baixar o PDF
http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/flash_as3_programming.pdf
Quem quiser ver direto no browser, aqui vai:
http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-8000.html
Até mais, bom estudo!
]]></description>
			<content:encoded><![CDATA[<p><img align="left" src="http://flexbuilder.direciona.com/imagens/Flash_CS3_logo.gif" style="display: inline; margin: 2px 20px 5px 0px" /> Olá pessoal, finalmente resolveram ter dó dos brasileiros e disponibilizaram o Guia de ActionScript 3.0 em Português, espero que atrás desse venham muitos outros, principalmente de Flex.</p>
<p>Segue o link para baixar o PDF</p>
<p><a href="http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/flash_as3_programming.pdf" title="http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/flash_as3_programming.pdf">http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/flash_as3_programming.pdf</a></p>
<p>Quem quiser ver direto no browser, aqui vai:</p>
<p><a href="http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-8000.html" title="http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-8000.html">http://help.adobe.com/pt_BR/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-8000.html</a></p>
<p>Até mais, bom estudo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=56</wfw:commentRss>
		</item>
		<item>
		<title>Google Maps API para Flash e Flex - Parte I</title>
		<link>http://www.flexbuilder.direciona.com/?p=55</link>
		<comments>http://www.flexbuilder.direciona.com/?p=55#comments</comments>
		<pubDate>Sat, 31 May 2008 18:55:17 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[Flex / Flex Builder]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=55</guid>
		<description><![CDATA[Este material é uma tradução do original http://code.google.com/intl/pt-BR/apis/maps/documentation/flash/intro.html#Versioning e todos os crédito são da Google, eu apenas traduzi o mesmo para o Português, ainda terão mais 5 partes que serão os exemplos de uso, já estou traduzindo e logo estará online. Se vocês querem Screencast sobre o assunto, pede pro Vedovelli que ele com certeza fará, se [...]]]></description>
			<content:encoded><![CDATA[<p>Este material é uma tradução do original <a href="http://code.google.com/intl/pt-BR/apis/maps/documentation/flash/intro.html#Versioning">http://code.google.com/intl/pt-BR/apis/maps/documentation/flash/intro.html#Versioning</a> e todos os crédito são da Google, eu apenas traduzi o mesmo para o Português, ainda terão mais 5 partes que serão os exemplos de uso, já estou traduzindo e logo estará online. Se vocês querem Screencast sobre o assunto, pede pro <a target="_blank" href="http://vedovelli.com.br" title="Vedovelli">Vedovelli </a>que ele com certeza fará, se já não o fez.O Google Maps API para Flash fornece um novo caminho para adicionar Google Maps interativo para seu site da web, usando plugin Flash® da Adobe para exibir conteúdo de mapas dinâmicos! Esta API existe como uma alternativa completamente independente do existente JavaScript Maps API, e fornece muitas das características daquela API enquanto também adicionando a habilidade de se misturar conteúdo de Flash com Google Maps.<br />
O Google Maps API para Flash é novo, então nós gostaríamos de ouvir seu feedback. Nós o encorajamos a dar a nós um feedback.</p>
<h3 id="Audience">Público</h3>
<p>Esta documentação é projetada para as pessoas que tem familiaridade com Flash, Programação de ActionScript, conceitos de programação orientado a objeto.<br />
Esta documentação é organizada para cobrir as seguintes áreas chave:</p>
<ul>
<li>Google Maps Flash Basics (and &#8220;Hello World&#8221; Tutorial)</li>
<li>Google Maps Flash Events</li>
<li>Google Maps Flash Controls</li>
<li>Google Maps Flash Overlays</li>
<li>Google Maps Flash Services</li>
</ul>
<p>Todos os novos desenvolvedores deviam ler ambos os documento, que explicam como instalar seu Google Map no ambiente de desenvolvimento Flash/Flex e mantê-lo, e , que explica como escrever sua primeira aplicação Google Maps Flash.</p>
<h3>Introdução</h3>
<p>Fornecendo uma versão de Flash, o Google Maps API permite aos desenvolvedores de Flash atuais integrar facilmente o Google Maps em seu ambientes de desenvolvimento Flash/Flex existente. Também, o Google Maps API para Flash abre um mundo inteiro de possibilidades interativas para exibir e usar conteúdo de mapa para aqueles desenvolvedores que não usam atualmente Flash.<br />
Este guia de desenvolvedor assume que você está familiarizado com desenvolvimento de Flash e programação de ActionScript. Também não assume uso de qualquer ambiente de desenvolvimento particular, entretanto ele usa o Adobe Flex SDK livremente disponível dentro deste tutorial.<br />
Note: Este guia usa exemplos da linha de comando COMO UNIX, entretanto seu uso não deve prejudicar a um ou outro desenvolvedores de Windows ou Macintosh.</p>
<h3>Instalando Seu Ambiente de Desenvolvimento</h3>
<p>O desenvolvimento de flash pode tomar muitas formas. Alguns desenvolvedores criam puramente dentro da aplicação de Flash para criar e organizar conteúdo, e adiciona ActionScript dentro daquele framework. Outros desenvolvedores usam uma IDE full-featured como Adobe® Flex® Builder para criar aplicações robustas com uso pesado de ActionScript. A escolha de ambiente de desenvolvimento é sua. Para este tutorial, porém, nós nos concentraremos em documentar o mais simples e a maioria da solução geral: O uso livre do Adobe Flex SDK 3 pela linha de comando.<br />
Esta seção discute como obter e instalar o Adobe Flex SDK, como obter o Google Maps API para biblioteca do Flash, e como instalar seu ambiente de desenvolvimento para você conseguir programar em ActionScript e construir seu primeiro Google Maps API para Flash Maps.</p>
<h3>Obtendo e Instalando o Adobe Flex SDK</h3>
<p>Estarei omitindo aqui essa parte já que a maioria já deve ter instalado na sua máquina o Flex, mas quem não tiver pode ir nesse endereço.<a href="http://www.adobe.com/products/flex/overview/#section-3"><br />
http://www.adobe.com/products/flex/overview/#section-3</a></p>
<h3>Obtendo a Biblioteca de Interface</h3>
<p>O conteúdo para desenvovimento em flash que integra Google Maps exige a inclusão do Google Maps API para biblioteca de interface de Flash dentro de seu código de aplicação. Esta biblioteca consiste em um arquivo *.swc que é contido dentro da API de Maps para Flash/Flex SDK disponível na seguinte URL:</p>
<p><a href="http://maps.googleapis.com/maps/flash/release/sdk.zip">http://maps.googleapis.com/maps/flash/release/sdk.zip</a></p>
<p>Este arquivo SWC contém interfaces para todas as classes públicas no Google Maps API para o ambiente de desenvolvimento Flex/Flash. Compilando sua aplicação com esta biblioteca assegura que pode utilizar e comunicar com toda funcionalidade pública do runtime Google Maps API para biblioteca do Flash, que é recuperado de servidores do Google sempre que um cliente carrega sua aplicação.<br />
Note que o tamanho do código que está correndo atualmente sua aplicação Flash Maps permanece separado do runtime que Google Maps API da biblioteca do Flash. Isto permite que façamos encarecimentos, bugs e modificações para a funcionalidade da core library sem exigir que você recompile sua aplicação. Note que se você já desejar utilizar nova funcionalidade que exige novas interfaces, você precisará carregar um SWC atualizado e recompilar sua aplicação.<br />
A biblioteca de interface filename contém um sufixo identificando seu número de versão. (Por exemplo, map_flex_1_1 identifica versão &#8220;1.1&#8243; da biblioteca de interface. Uma vez que você carregou a biblioteca de interface, crie um diretório de desenvolvimento e coloca o arquivo na raiz daquele diretório.</p>
<p>CÓDIGO UNIX:</p>
<p class="codigo"># #Create a development directory<br />
#</p>
<p class="codigo">hostname$ mkdir myflashapp<br />
hostname$ cd myflashapp</p>
<p class="codigo"># # Copy the Google Maps API for Flash SDK to the root of your working development directory<br />
#</p>
<p class="codigo">hostname$ cp ~/sdk.zip</p>
<p class="codigo"># # Unzip the SDK. The SWC interface library is located within the &#8220;lib&#8221; directory # Offline ASDoc HTML documentation is available within the &#8220;docs&#8221; directory<br />
#</p>
<p class="codigo">hostname$ unzip sdk.zip</p>
<h3>Obtendo uma Maps API Kye</h3>
<p>O Google Maps API para Flash, como o Google JavaScript Maps API, exige uso de um <a href="http://code.google.com/intl/pt-BR/apis/maps/signup.html">freely available developer key</a> que você precisará especificar esta clave dentro de um dos três locais possíveis:<br />
· Seu código ActionScript (compilando isto no SWF resultante)<br />
· Um arquivo de configuração especial chamando uma declaração MXML<br />
· O container DOM element em suas página da Web.<br />
Este conjunto de documento discute as duas técnicas posteriores.</p>
<h3>Instalando seus Diretórios de Desenvolvimento</h3>
<p>O Google recomenda que você desenvolva sua aplicação usando um unico namespace que você possui, para prevenir colisões com outras aplicações, especialmente se você terá muitos desenvolvedores que trabalham em aplicações de flash múltiplo ao mesmo tempo. Usando namespaces também permite que você empacote seu código de aplicação em packages, que permita mais facilidade no compartilhando de código comum.<br />
Os pacotes e namespaces devem ser definidos usando seu domínio de organização, e sub-domínio. Por exemplo, o Google Maps namespace é definido como com.google.maps e um pacote de exemplos dentro daquele namespace seriam definidos como com.google.maps.examples. Você pode então usar este namespace implicitamente para definir a estrutura de diretório de sua aplicação (por exemplo com/google/maps/examples/).<br />
Você usará este namespace para definir um pacote dentro de seu código ActionScript, e definir sua aplicação dentro da declaração de MXML. Geralmente, ActionScript (*.as) reside dentro do diretório mais baixo de qualquer namespace que é definido, enquanto as declarações de MXML (*.mxml) residam na &#8220;raiz&#8221; da estrutura de diretório.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=55</wfw:commentRss>
		</item>
		<item>
		<title>Iniciando com Cairngorm – Parte 4</title>
		<link>http://www.flexbuilder.direciona.com/?p=54</link>
		<comments>http://www.flexbuilder.direciona.com/?p=54#comments</comments>
		<pubDate>Sat, 17 May 2008 02:59:33 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[Flex / Cairngorm]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=54</guid>
		<description><![CDATA[
A base Cairngorm  Event Flow que &#233; tratada na parte 3 &#233; essencial para qualquer aplica&#231;&#227;o  Cairngorm, mas a maioria das aplica&#231;&#245;es interage com um servidor. O Servi&#231;o  para trabalhar com o padr&#227;o que foi discutido no tutorial anterior &#233;  fundamental para este processo. Para aprender e expandir o Cairngorm Flow, [...]]]></description>
			<content:encoded><![CDATA[<p>
A base Cairngorm  Event Flow que &eacute; tratada na parte 3 &eacute; essencial para qualquer aplica&ccedil;&atilde;o  Cairngorm, mas a maioria das aplica&ccedil;&otilde;es interage com um servidor. O Servi&ccedil;o  para trabalhar com o padr&atilde;o que foi discutido no tutorial anterior &eacute;  fundamental para este processo. Para aprender e expandir o Cairngorm Flow, voc&ecirc;  precisa aprender alguns novos elementos do Cairngorm.</p>
<h3>
  <strong>O  Servidor - Intera&ccedil;&otilde;es e Elementos</strong></h3>
<p>Existem tr&ecirc;s novos tipos de classes que voc&ecirc; precisar&aacute;  estar familiarizado com a compreender o pleno Servi&ccedil;o Worker Pattern.</p>
<ul>
<li><strong>ServiceLocator</strong> [Refer&ecirc;ncia] - O ServiceLocator &eacute; um  singleton que cont&eacute;m refer&ecirc;ncias para todos os servi&ccedil;os que a sua aplica&ccedil;&atilde;o ir&aacute;  utilizar. E geralmente inclui chamadas HTTPService, WebService, ou  RemoteObject.</li>
<li>&nbsp;<strong>Business  Delegate</strong> - O Business Delegate tem tr&ecirc;s fun&ccedil;&otilde;es: para localizar o servi&ccedil;o  que &eacute; necess&aacute;rio, para efetuar uma chamada para um m&eacute;todo sobre o servi&ccedil;o, bem  como a rota do resultado para o especificado respondedor. Geralmente, h&aacute; uns  Neg&oacute;cios delegados para cada servi&ccedil;o. </li>
<li><strong>Value Object </strong>&ndash; Value Objects s&atilde;o classes que por  defini&ccedil;&atilde;o n&atilde;o exigem qualquer m&eacute;todos, apenas propriedades. Eles permitem a  aplica&ccedil;&atilde;o transferir dados strongly-typed&nbsp; complexos do objetos para e do servidor.</li>
</ul>
<h3><strong>Organizando  seu projeto Cairngorm </strong>(Com Server Interaction) </h3>
<p>No &uacute;ltimo tutorial voc&ecirc; viu o padr&atilde;o da estrutura de um  projeto Cairngorm. Para completar esta estrutura, voc&ecirc; precisar&aacute; adicionar duas  novas pastas:</p>
<ul>
<li><strong>/business</strong> - Esta pasta cont&eacute;m normalmente dois tipos  de arquivos: o ServiceLocator (chamado Services.mxml) e Business Delegates. </li>
<li><strong>/vo</strong> - Esta  pasta cont&eacute;m o valor dos objetos que s&atilde;o passados de e para o servidor</li>
</ul>
<h4><strong>Entendendo  o processo</strong></h4>
<p>Antes de come&ccedil;ar a elaborar a intera&ccedil;&atilde;o com servidor para  o seu projeto, voc&ecirc; precisa entender o pleno Servi&ccedil;o Worker pattern. A Figura 1 ilustra todo o  processo.</p>
<p>
  <img border="0" width="483" height="274" src="http://flexbuilder.direciona.com/imagens/001.jpg" alt="Full Cairngorm Diagram Final" /> <br />
  <strong>Figure 1 </strong>-  Cairngorm Event Flow with Server Interaction</p>
<h4>
  <strong>Fase I</strong> &ndash; Executando </h4>
<ul>
<li>O usu&aacute;rio  est&aacute; visualizando um componente que tem um bot&atilde;o login. Quando o bot&atilde;o &eacute;  clicado, esse componente enviar&aacute; um evento chamado LoginEvent que se estende do  CairngormEvent.</li>
<li>O  FrontController ir&aacute; receber o LoginEvent e executar o comando que &eacute; mapeado para  o evento. Para este exemplo, ser&aacute; nomeado LoginCommand e implementar&aacute; ICommand. </li>
<li>O  comando &eacute; executado e receber&aacute; o LoginEvent como um argumento. O LoginCommand  cria uma inst&acirc;ncia Delegate enquanto passar uma refer&ecirc;ncia ao Responder. O Comando ent&atilde;o chama o m&eacute;todo  especificado no Delegate. </li>
<li>O  Delegate recebe o servi&ccedil;o do ServiceLocator e convida o m&eacute;todo espec&iacute;fico sobre  o servi&ccedil;o.</li>
<li>O  servi&ccedil;o definido no ServiceLocator recebe as informa&ccedil;&otilde;es que s&atilde;o passadas para  ele a partir da chamada do Delegate. </li>
</ul>
<h3><strong>Phase II</strong> &ndash; A Aplica&ccedil;&atilde;o processa a camada <br />
    <strong>Phase III</strong> &ndash; Responde</h3>
<ul>
<li>O  servi&ccedil;o que est&aacute; definido no ServiceLocator retorna o resultado do  processamento do lado do servidor. </li>
<li>O  Delegate recebe o resultado e passa-o para o responder&nbsp; especificado. </li>
<li>O  Responder recebe o resultado indicando um login bem-sucedido. </li>
<li>O  ModelLocator ter&aacute; uma constante predefinida para o &quot; Logged in View &quot;. O Responder mudar&aacute; workflowState  para este valor. </li>
<li>Desde o  ponto de vista &eacute; obrigado a workflowState, ir&aacute; automaticamente atualizar-se para  a nova posi&ccedil;&atilde;o.</li>
</ul>
<p>Nota:  Tradicionalmente, o Command e Responder eram da mesma classe em uma aplica&ccedil;&atilde;o  Cairngorm. Se estiver trabalhando com outros desenvolvedores, os pedidos ser&atilde;o provavelmente  codificados desta forma. Contudo, a maioria dos desenvolvedores (incluindo  Adobe Consulting) est&atilde;o agora separando estas classes em duas classes  diferentes. Pelo menos em um projecto complexo, &eacute; poss&iacute;vel que n&atilde;o fa&ccedil;a sentido  para esses itens separados, mas em um grande pedido poder&aacute; ser vantajosa na  organiza&ccedil;&atilde;o e pr&aacute;tica para ter duas classes diferentes</p>
<h4><strong>O  ServiceLocator</strong> </h4>
<p> O ServiceLocator  &eacute; um singleton que cont&eacute;m refer&ecirc;ncias para todos os servi&ccedil;os que o pedido ser&aacute;  utilizado. Esses servi&ccedil;os podem ser RemoteObjects, HTTPServices, WebServices,  personalizado ou servi&ccedil;os. Tal como o FrontController, esta classe &eacute; geralmente  instanciado no seu arquivo principal da aplica&ccedil;&atilde;o. Ao contr&aacute;rio de muitos dos  outros projetos Cairngorm que voc&ecirc; criou, esta classe pode ser definida em MXML  (bem como ActionScript). Para definir corretamente esta em MXML, deve haver um  namespace que aponta para a pasta business da pasta Cairngorm. Neste caso, o  namespace cairngorm &eacute; tipicamente usado. O ServiceLocator no C&oacute;digo Exemplo 1  disp&otilde;e de um servi&ccedil;o definido, loginService</p>
<p>  <span class="codigo"><strong>Actionscript:</strong> </span></p>
<ul>
<li class="codigo">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</li>
<li class="codigo">&lt;cairngorm:ServiceLocator</li>
<li class="codigo">&nbsp; &nbsp; xmlns:cairngorm=&quot;com.adobe.cairngorm.business.*&quot; </li>
<li class="codigo">&nbsp; &nbsp; xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;&gt;</li>
<li class="codigo">&nbsp; &nbsp; </li>
<li class="codigo">&nbsp; &nbsp; &lt;!&#8211; Login Service  &#8211;&gt;</li>
<li class="codigo">&nbsp; &nbsp; &lt;mx:RemoteObject id=&quot;loginService&quot; </li>
<li class="codigo">&nbsp; &nbsp; &nbsp; &nbsp;  showBusyCursor=&quot;true&quot; </li>
<li class="codigo">&nbsp; &nbsp; &nbsp; &nbsp;  destination=&quot;ColdFusion&quot; </li>
<li class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; source=&quot;CairngormTest.CairngormLogin&quot;&gt;</li>
<li class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; </li>
<li class="codigo">&nbsp; &nbsp; &nbsp; &nbsp;  &lt;mx:method name=&quot;login&quot; /&gt;&nbsp; </li>
<li class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; </li>
<li class="codigo">&nbsp; &nbsp;  &lt;/mx:RemoteObject&gt;</li>
<li class="codigo">&nbsp; &nbsp; </li>
<li class="codigo">&lt;/cairngorm:ServiceLocator&gt; </li>
</ul>
<p><span class="codigo"><strong></strong></span><strong>Code  Example 1</strong> -  Simples ServiceLocator</p>
<p>
  O ServiceLocator &eacute; normalmente chamado Services.mxml e reside  na pasta business do seu projeto Cairngorm<br />
&nbsp;<strong>Comandos com Server Interaction</strong><br />
No &uacute;ltimo tutorial voc&ecirc; hard-coded alguns valores no  LoginCommand para verificar se um determinado nome de usu&aacute;rio e senha. Aqui foi  o m&eacute;todo execute:</p>
<p class="codigo"><strong>Actionscript:</strong> </p>
<p><span class="codigo"></p>
<ul>
</span></p>
<p class="codigo">public <strong>function</strong> execute(event:CairngormEvent):void { </p>
<p class="codigo">&nbsp; &nbsp; <strong>var</strong> loginEvent:LoginEvent = event as LoginEvent;</p>
<p class="codigo">&nbsp; &nbsp; if( (loginEvent.username == &quot;david&quot;) &amp;&amp; (loginEvent.password == &quot;password&quot;)) { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; modelLocator.workflowState = ViewModelLocator.WELCOME_SCREEN;</p>
<p class="codigo">&nbsp; &nbsp; } </p>
<p class="codigo">} </p>
<p><strong>Code Example 2</strong> &ndash;  Comandos com Without Delegate</p>
<p>  Esta metodologia  ser&aacute; uma realidade para qualquer comando que n&atilde;o tem intera&ccedil;&atilde;o com o servidor,  mas se voc&ecirc; tem intera&ccedil;&atilde;o com o servidor, ter&atilde;o de ser modificados para incluir  o delegate. Primeiro voc&ecirc; ter&aacute; que tomar uma decis&atilde;o. Tal como referido  anteriormente, voc&ecirc; pode ter separado Comandos e respondedores, ou eles podem  ser a mesma classe. Para este exemplo, que ser&aacute; a mesma classe. O Comando ir&aacute;  agora tamb&eacute;m ter necessidade de se implementar a classe mx.rpc.IResponder  (observe que com.adobe.cairngorm.business.Responder est&aacute; obsoleta e deve deixar  de ser utilizado).</p>
<p>A outra  altera&ccedil;&atilde;o inicial &eacute; que execute o m&eacute;todo agora instanciando uma classe chamada  LoginDelegate (que ser&aacute; criado em breve). A classe LoginDelegate exigi um  argumento em seu construtor, o Respondedor do servi&ccedil;o. Neste caso, o comando  ir&aacute; funcionar tanto como o comando e a resposta, assim voc&ecirc; s&oacute; precisa inserir  a palavra-chave <em>this</em> dentro do  par&ecirc;ntese. Se optar por ter um respondedor separado, voc&ecirc; iria inserir a  refer&ecirc;ncia a ele aqui (em vez da palavra-chave <em>this</em>).</p>
<p>    <span class="codigo"><strong>Actionscript:</strong> </span></p>
<p class="codigo">package net.davidtucker.CairngormSample.commands { </p>
<p class="codigo">&nbsp;&nbsp; import com.adobe.cairngorm.commands.ICommand;</p>
<p class="codigo">&nbsp; &nbsp; import com.adobe.cairngorm.control.CairngormEvent;</p>
<p class="codigo">&nbsp; &nbsp; import mx.controls.Alert;</p>
<p class="codigo">&nbsp; &nbsp; import mx.rpc.IResponder;</p>
<p class="codigo">&nbsp; &nbsp; import net.davidtucker.CairngormSample.business.LoginDelegate;</p>
<p class="codigo">&nbsp; &nbsp; import net.davidtucker.CairngormSample.events.LoginEvent;</p>
<p class="codigo">&nbsp; &nbsp; import net.davidtucker.CairngormSample.model.ViewModelLocator;</p>
<p class="codigo">&nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; public <strong>class</strong> LoginCommand  implements  ICommand,IResponder { </p>
<p class="codigo">&nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>var</strong> modelLocator:ViewModelLocator = ViewModelLocator.getInstance();</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>function</strong> LoginCommand() { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; } </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>function</strong> execute(event:CairngormEvent):void { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>var</strong> loginEvent:LoginEvent = event as LoginEvent;</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>var</strong> delegate:LoginDelegate = <strong>new</strong> LoginDelegate( this );</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; delegate.login(loginEvent.loginAttempt);</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; } </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>function</strong> result( event:Object ):void { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(event.result == <strong>true</strong>) { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; modelLocator.workflowState = ViewModelLocator.WELCOME_SCREEN;</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mx.controls.Alert.show(&quot;Password  Incorrect&quot;,&quot;ERROR&quot;);</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; } </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>function</strong> fault( event:Object ):void { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; trace(&quot;Service Error&quot;);</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; } </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; } </p>
<p><span class="codigo">}</span> </p>
<p><span class="codigo"><strong></strong></span><strong>Code Example 3</strong> -  Command with Server Interaction Through a Delegate
    </p>
<h4><strong>Value  Objects</strong> </h4>
<p>O Value Object  n&atilde;o prorrogar ou implementa qualquer classe Cairngorm. Tal como referido  anteriormente, ele simplesmente &eacute; uma classe que s&oacute; &eacute; obrigado a ter  propriedades, mas n&atilde;o m&eacute;todos. Por exemplo, se voc&ecirc; criou um Value Object para  uma entrada - ele teria uma propriedade de um nome de usu&aacute;rio e senha<strong>Actionscript:</strong></p>
<p>&nbsp;</p>
<p class="codigo">package net.davidtucker.CairngormSample.vo {</p>
<p class="codigo">&nbsp; &nbsp; [RemoteClass(alias=&quot;CairngormTest.LoginVO&quot;)] </p>
<p class="codigo">&nbsp; &nbsp; public <strong>class</strong> LoginVO { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>var</strong> username:String;</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>var</strong> password:String;</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>function</strong> LoginVO(username:String,password:String) { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.username = username;</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &nbsp; this.password = password;</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; } </p>
<p class="codigo">&nbsp; &nbsp; } </p>
<p><span class="codigo">}</span> </p>
<p><strong>Code Example 4</strong> - Value  Object for Login</p>
<p> A metatag  RemoteClass &eacute; importante notar. Esta permitir&aacute; o correspondente objeto  server-side&nbsp; (Componente do ColdFusion,  classe PHP, Classe de Java, etc&#8230;) Para ser mapeado para este Valor de Objeto.  Neste caso, &eacute; mapeado para um componente do ColdFusion chamado LoginVO no  pasta&nbsp; CairngormTest..<br />
  <strong>Business  Delegates</strong> <br />
  O  padr&atilde;o de projeto final na Micro-Arquitetura do Cairngorm &eacute; o Business  Delegate. Uns Business Delegate essencialmente &eacute; a camada de abstra&ccedil;&atilde;o entre  seus servi&ccedil;os e o resto da sua aplica&ccedil;&atilde;o. Como declarado anteriormente, tem  tr&ecirc;s fun&ccedil;&otilde;es. Primeiras, o Business Delegate localizar&aacute; o servi&ccedil;o que &eacute;  necess&aacute;rio no ServiceLocator. Segundo, solicitar&aacute; um m&eacute;todo de servi&ccedil;o.  Finalmente, ele criar&aacute; uma rota de resposta que volta para o responder  especificado (normalmente ou um comando responder separado).<br />
Uma  classe Delegada n&atilde;o estende ou implementa classes Cairngorm, mas ela geralmente  segue as seguintes diretrizes.</p>
<blockquote>
<p>&bull;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; O  Delegate tem pelo menos duas propriedades: Uma chamada servi&ccedil;o o qual &eacute; uma  refer&ecirc;ncia para um servi&ccedil;o no ServiceLocator e um chamado responder que &eacute; a  resposta para as chamadas de servi&ccedil;o. <br />
    &bull;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Existe  um m&eacute;todo para cada m&eacute;todo server-side que voc&ecirc; estar&aacute; chamando. <br />
    &bull;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ambos o responder e as vari&aacute;veis de  servi&ccedil;o s&atilde;o fixadas no construtor. </p>
</blockquote>
<p class="codigo"><strong>Actionscript:</strong> </p>
<p class="codigo">package net.davidtucker.CairngormSample.business { </p>
<p class="codigo">&nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; import mx.rpc.IResponder;</p>
<p class="codigo">&nbsp;       &nbsp; import       net.davidtucker.CairngormSample.vo.LoginVO;</p>
<p class="codigo">&nbsp;       &nbsp; import       com.adobe.cairngorm.business.ServiceLocator;</p>
<p class="codigo">&nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; public <strong>class</strong> LoginDelegate { </p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; private <strong>var</strong> responder : IResponder;</p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; private <strong>var</strong> service : Object;&nbsp; &nbsp;</p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>function</strong> LoginDelegate( responder:IResponder ) { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;       &nbsp; this.responder = responder;</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;       &nbsp; this.service = ServiceLocator.getInstance().getRemoteObject(&quot;loginService&quot;);</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; } </p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; public <strong>function</strong> login(login:LoginVO):void { </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;       &nbsp; <strong>var</strong> call:Object = service.login(       login );</p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;       &nbsp; call.addResponder( responder );</p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; } </p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; </p>
<p class="codigo">&nbsp;       &nbsp; } </p>
<p class="codigo">} </p>
<p><strong>Code  Example 5</strong> -  Service Delegate</p>
<p>  Existem  muitos benef&iacute;cios em ter esta camada. Se codificada corretamente, voc&ecirc; deve ser  capaz de mudar a intera&ccedil;&atilde;o de servidor (indo de PHP at&eacute; ColdFusion por exemplo)  e s&oacute; ter que mudar o c&oacute;digo em seu ServiceLocator e seu Delegate. Voc&ecirc; tamb&eacute;m  pode facilmente inserir &quot;stub code&quot; simular a intera&ccedil;&atilde;o de servidor  real durante as primeiras fases de desenvolvimento.<br />
  <strong>The  Application Tier</strong> <br />
  Neste  exemplo, a Camada de Aplica&ccedil;&atilde;o ser&aacute; lidada por uma instala&ccedil;&atilde;o do ColdFusion 8.  Conter&aacute; dois componentes de Coldfusion. Estes componentes s&atilde;o propositadamente  simples.</p>
<ol start="1" type="1">
<li><strong>LoginVO.cfc</strong> - Este componente       corresponder&aacute; a classe ActionScript LoginVO que voc&ecirc; criou anteriormente. </li>
<li><strong>CairngormLogin.cfc</strong> - Este componente       apresentar&aacute; o processo de login atual. </li>
</ol>
<p>Neste  exemplo, A aplica&ccedil;&atilde;o Flex passar&aacute; por um objeto LoginVO ActionScript para o  m&eacute;todo login do CairngormLogin.cfc por uma chamada RemoteObject. Isto ser&aacute;  mapeado para um objeto de LoginVO.cfc. Se este objeto LoginVO.cfc tem o  username &quot;David&quot; e a senha de &quot;password&quot; o m&eacute;todo retornar&aacute;  true. Se n&atilde;o, retornar&aacute; false.</p>
<p class="codigo"><strong>Coldfusion:</strong> </p>
<p class="codigo"><strong>&lt;cfcomponent</strong> displayname=&quot;LoginVO&quot; hint=&quot;Login VO For CairngormTest&quot; output=&quot;false&quot;<strong>&gt;</strong> </p>
<p class="codigo">&nbsp;</p>
<p class="codigo">&nbsp; &nbsp; <strong>&lt;cfset</strong> this.username       = &quot;&quot; <strong>/&gt;</strong> </p>
<p class="codigo">&nbsp;       &nbsp; <strong>&lt;cfset</strong> this.password = &quot;&quot; <strong>/&gt;</strong> </p>
<p class="codigo">&nbsp;       &nbsp; </p>
<p><span class="codigo"><strong>&lt;/cfcomponent&gt;</strong></span> </p>
<p><span class="codigo"><strong></strong></span><strong>Code  Example 6</strong> -  LoginVO.cfc</p>
<p class="codigo"><strong>Coldfusion:</strong> </p>
<p class="codigo"><strong>&lt;cfcomponent</strong> displayname=&quot;CairngormLogin&quot; hint=&quot;CFC to Test Cairngorm Service       Interaction&quot; output=&quot;false&quot;<strong>&gt;</strong></p>
<p class="codigo">&nbsp; &nbsp; <strong>&lt;cffunction</strong> name=&quot;login&quot; displayname=&quot;login&quot; access=&quot;remote&quot; output=&quot;false&quot; returntype=&quot;boolean&quot;<strong>&gt;</strong> </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; <strong>&lt;cfargument</strong> name=&quot;loginAttempt&quot; type=&quot;LoginVO&quot; required=&quot;true&quot; <strong>/&gt;</strong></p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;       &nbsp; <strong>&lt;cfif</strong> (loginAttempt.username EQ &quot;david&quot;) AND (loginAttempt.password EQ &quot;password&quot;)<strong>&gt;</strong> </p>
<p class="codigo">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;       &nbsp; &nbsp; &nbsp; <strong>&lt;cfreturn</strong> true <strong>/&gt;</strong> </p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>&lt;cfelse&gt;</strong> </p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>&lt;cfreturn</strong> false <strong>/&gt;</strong> </p>
<p class="codigo">&nbsp;       &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>&lt;/cfif&gt;</strong></p>
<p class="codigo">&nbsp;       &nbsp; <strong>&lt;/cffunction&gt;</strong></p>
<p><span class="codigo"><strong>&lt;/cfcomponent&gt;</strong></span> </p>
<p><strong>Code Example 7</strong> -  CairngormLogin.cfc</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=54</wfw:commentRss>
		</item>
		<item>
		<title>Manifesto Flex Brasil</title>
		<link>http://www.flexbuilder.direciona.com/?p=53</link>
		<comments>http://www.flexbuilder.direciona.com/?p=53#comments</comments>
		<pubDate>Tue, 11 Mar 2008 13:06:53 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[Flex / Flex Builder]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=53</guid>
		<description><![CDATA[Saiba o que é o Manifesto Flex Brasil
Minha principal contribuição para a comunidade:
Traduções da Documentação do Flex.
Por que ela é relevante: Porque assim como eu que não tenho um inglês fluente, muitos desenvolvedores que estão aderindo ao Flex, tanto programadores amadores, como seniors, passam pela mesma dificuldade, esbarrando na enorme quantidade de informações e tutoriais [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.dclick.com.br/2008/03/10/o-que-e-o-manifesto-flex-brasil/">Saiba o que é o Manifesto Flex Brasil</a></p>
<h3>Minha principal contribuição para a comunidade:</h3>
<h4><a href="http://flexbuilder.direciona.com">Traduções da Documentação do Flex</a>.</h4>
<p><strong>Por que ela é relevante:</strong> Porque assim como eu que não tenho um inglês fluente, muitos desenvolvedores que estão aderindo ao Flex, tanto programadores amadores, como seniors, passam pela mesma dificuldade, esbarrando na enorme quantidade de informações e tutoriais sobre Flex, mas grande parte em Inglês, e como para traduzir acaba honerando no precioso tempo que não temos pra traduzir.</p>
<p>A quem se destina: Aos desenvolvedores tanto com experiência como os que estão entrando agora nesse mundo. E que não dispõe nem de tempo, pra traduzir e nem de um bom Inglês.</p>
<h4><a href="http://www.flexbuilder.direciona.com/?p=50">Iniciando com Cairngorm.<br />
</a></h4>
<p><strong>Por que ele é relevante</strong>: Não preciso dizer aqui a importância de um bom desenvolvimento e o Cairngorm, que é da própria Adobe, vem ao encontro desse bom desenvolvimento, ele é um framework para o Flex, possobilitando um desenvolvimento em cima do MVC (Model. View, Controllers) facilitando não só o desenvolvimento individual de um sistema como o desenvovimento em equipe.</p>
<p><strong>A quem se destina</strong>: Aos desenvolvedores interessados em fazer projetos mais robustos e bem estruturados.</p>
<h4>Eu passo a bola para: <a target="_blank" href="http://www.vedovelli.com.br/?p=97">Fabio Vedovelli</a></h4>
<p class="style1">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=53</wfw:commentRss>
		</item>
		<item>
		<title>Iniciando com Cairngorm – Parte 3</title>
		<link>http://www.flexbuilder.direciona.com/?p=52</link>
		<comments>http://www.flexbuilder.direciona.com/?p=52#comments</comments>
		<pubDate>Sat, 08 Mar 2008 14:06:00 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[Flex / Cairngorm]]></category>

		<category><![CDATA[Flex Builder]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=52</guid>
		<description><![CDATA[Agora que você tem isolados dois elementos específicos do Micro-Arquitetura Cairngorm, vamos agora criar uma aplicação mais completa. Até agora os tutoriais abrangeo apenas um design pattern, o ModelLocator, mas agora você será apresentado ao elemento mais determinante do Cairngorm, o Serviço ao Trabalhar com design padrão. A explicação deste padrão será em dois tutoriais. [...]]]></description>
			<content:encoded><![CDATA[<p>Agora que você tem isolados dois elementos específicos do Micro-Arquitetura Cairngorm, vamos agora criar uma aplicação mais completa. Até agora os tutoriais abrangeo apenas um design pattern, o ModelLocator, mas agora você será apresentado ao elemento mais determinante do Cairngorm, o Serviço ao Trabalhar com design padrão. A explicação deste padrão será em dois tutoriais. Este tutorial destina-se a cobrir o fluxo básico dentro de uma aplicação Cairngorm, bem como o próximo tutorial será expandida para incluir este fluxo servidor interação. No entanto, antes que você possa aplicar adequadamente este projeto padrão você precisa aprender sobre a organização de um projecto Cairngorm</p>
<h4>Organizando um projeto Cairngorm</h4>
<p>Uma das tarefas envolvidas com o projeto é qualquer organização. Ao trabalhar com outros desenvolvedores, esta se torna extremamente importante. Normalmente, um projeto Cairngorm é organizado da seguinte forma:</p>
<p>Existe um arquivo Main.mxml que é a aplicação principal para o Cairngorm.<br />
• Os arquivos do projeto estão contidos em uma pasta que usa o formato &#8221; reverse-dns &#8220;. Por exemplo, se o projecto foi nomeado CairngormSample, gostaria de utilizar as seguintes pastas net / davidtucker / CairngormSample.<br />
• Dentro do diretório CairngormSample, haverá as seguintes pastas (haverá outras pastas adicionado no próximo tutorial).</p>
<ul>
<li><strong>event/</strong> - Este diretório mantém todos os eventos personalizados para a aplicação</li>
<li><strong>control/</strong> - Este diretório é a casa do FrontController para a aplicação</li>
<li><strong>commands/</strong> - Este diretório contém os comandos que são chamados pela FrontController</li>
<li><strong>model/</strong> - A ModelLocator está contido nesta pasta (e outras classes relacionadas com o model)</li>
<li><strong>view/</strong> - Os componentes de view estão contidos neste diretório</li>
</ul>
<p>Seguindo esse padrão, você pode saber onde encontrar qualquer classe que você pode precisar na sua aplicação Cairngorm. A Figura 1 ilustra esta estrutura de projeto. Ele também é um bom processo de desenvolvimento a ter um padrão estrutura organizacional para seus projetos - mesmo se você não estiver usando Cairngorm<br />
<img border="0" width="219" src="http://www.davidtucker.net/wp-content/uploads/cairngormproject-1.jpg" alt="Cairngorm Project Folder" height="317" /><br />
<strong>Figure 1</strong> - Cairngorm Project Structure</p>
<h4>O serviço para trabalhar com padrão.</h4>
<p>O Serviço para Trabalhar com Padrão é o mais difícil para a maioria das pessoas entenderem. Abrange mais da lógica da aplicação Cairngorm. Para compreender este padrão, será necessário compreender algumas das classes que estão incluídas no Cairngorm e seus respectivos efeitos.</p>
<p>• <strong>CairngormEvent</strong> [<a href="http://www.davidtucker.net/docs/cairngorm/com/adobe/cairngorm/control/CairngormEvent.html">Referência</a>] - CairngormEvent é central nesse padrão. Trata-se do evento. Para o evento ser tratados adequadamente no Cairngorm, ela terá de ser do tipo CairngormEvent.<br />
• <strong>CairngormEventDispatcher</strong> [<a href="http://www.davidtucker.net/docs/cairngorm/com/adobe/cairngorm/control/CairngormEventDispatcher.html">Referência</a>] - CairngormEventDispatcher efetivamente as expedições CairngormEvents. É um Singleton (tal como o ModelLocator). Em versões anteriores Cairngorm, que poria esta classe regular, mas agora CairngormEvents pode-se (através do método de expedição). Este método é simplesmente um wrapper para o CairngormEventDispatcher, por isso mesmo se não tiver realmente importado e chamado a classe, ainda é central para o Service to Worker pattern em Cairngorm.<br />
• <strong>FrontController</strong> [<a href="http://www.davidtucker.net/docs/cairngorm/com/adobe/cairngorm/control/FrontController.html">Referência</a>] – Os mapas FrontController é um CairngormEvent para um Command.<br />
• <strong>ICommand</strong> [<a href="http://www.davidtucker.net/docs/cairngorm/com/adobe/cairngorm/commands/ICommand.html">Referência</a>] - Para um comando funcionar corretamente em Cairngorm, ele precisa implementar a interface <strong>ICommand</strong>. Essa interface exige que um comando terá um método chamado <em>execute</em> e que aceitará o CairngormEvent que é mapeada para ela como um argumento.</p>
<h4>O Event Flow do Cairngorm</h4>
<p>A forma que essas classes interagem é o Cairngorm Evento Flow. A Figura 2 ilustra todo este processo. Enquanto este processo parece moroso, que segue uma ordem lógica.<br />
<img border="0" width="424" src="http://www.davidtucker.net/wp-content/uploads/cairngormdiagram-basic.jpg" alt="Basic Cairngorm Event Flow" height="193" /><br />
<strong>Figure 2 </strong>- Cairngorm Basic Event Flow<br />
Por exemplo, assumir que a Figura 2 mostra o que acontece quando o usuário clica em um botão login. Tratar-se-ia seguir os seguintes passos</p>
<ul>
<li>O usuário está visualizando um componente que tem um botão login.</li>
<li>Quando o botão é clicado, esse componente disparará um evento chamado LoginEvent que se estende CairngormEvent.</li>
<li>O FrontController irá receber o LoginEvent e executar o comando que é mapeado para o evento. Para este exemplo, será nomeado LoginCommand e implementará ICommand.</li>
<li>O comando é executado e recebeu o LoginEvent como um argumento. O LoginCommand irá alterar o valor workflowState no ModelLocator.</li>
<li>O ModelLocator terá uma constante predefinida para o &#8221; Logged in View &#8220;. O comando irá mudar workflowState para este valor.</li>
<li>Neste ponto a view assumirá workflowState, irá automaticamente atualizar-se para a nova posição.</li>
</ul>
<p>Depois que esses itens são entendidos, a próxima coisa mais importante para compreender O Cairngorm é: Tudo Deve Ser mapeadas para um evento. Trata-se de um excesso de simplificação drástica, mas é válido em muitas situações. Quando o usuário clica em um botão login - ele deve enviar uma CairngormEvent. Quando o usuário seleciona uma opção de mudar de opinião - ele deve enviar uma CairngormEvent. Quando um usuário envia um formulário para ser armazenado em um banco de dados - o formulário deverá enviar uma CairngormEvent. A expedição de um CairngormEvent conjuntos tudo em movimento</p>
<h4>Custom CairngormEvent</h4>
<p>A classe CairngormEvent pode ser utilizada dentro de seu projeto, mas na maioria das situações você irá criar seus próprios eventos personalizados que se estendem CairngormEvent (como afirmado anteriormente, de um evento para ser incluído no Cairngorm Event Flow ela deve estender CairngormEvent). Outra razão para criar eventos é personaliza-los para criar propriedades personalizadas do evento, que contêm os dados que você precisa passar para o comando. CairngormEvent tem uma propriedade denominada data (tipo de objeto), que podem conter dados, mas é ideal para ter uma propriedade strongly-typed onde você pode colocar os dados para passar.</p>
<p>Para este exemplo vai criar um evento que corresponde ao exemplo anterior de uma página de login. Este evento terá de cumprir os seguintes critérios:</p>
<ul>
<li>Estender CairngormEvent</li>
<li>Ter uma propriedade para o nome de usuário</li>
<li>Ter uma propriedade para a senha</li>
</ul>
<p>Código Exemplo 1 ilustra este evento concluído. Você pode ver que você precisará importar tanto a classe CairngormEvent como a basic Event. Além disso, tal como acontece com todos os eventos, você tem que definir o evento constante. Neste caso, você pode usar LOGIN. As propriedades são definidas abaixo do constante - e eles também são passados para o construtor. A única coisa fora do normal é que você precisa se sobrepor ao método público clone (). Isto é o que o método utiliza o evento para fazer uma cópia de si mesmo. Isto é fundamental no Cairngorm Event Flow. Além disso, para a função de implementar ICommand este método terá de ter um retorno tipo de evento (e não CairngormEvent).</p>
<h4><strong>Actionscript:</strong></h4>
<ul>
<li class="codigo">package net.davidtucker.CairngormSample.events {</li>
<li class="codigo">   </li>
<li class="codigo">    import com.adobe.cairngorm.control.CairngormEvent;</li>
<li class="codigo">    import flash.events.Event;</li>
<li class="codigo">   </li>
<li class="codigo">    public <strong>class</strong> LoginEvent extends CairngormEvent {</li>
<li class="codigo">   </li>
<li class="codigo">        public static const LOGIN:String = &#8220;Login&#8221;;</li>
<li class="codigo">       </li>
<li class="codigo">        public <strong>var</strong> username:String;</li>
<li class="codigo">        public <strong>var</strong> password:String;</li>
<li class="codigo">       </li>
<li class="codigo">        public <strong>function</strong> LoginEvent(submittedUsername:String,submittedPassword:String) {</li>
<li class="codigo">            username = submittedUsername;</li>
<li class="codigo">            password = submittedPassword;</li>
<li class="codigo">            super(LOGIN);         </li>
<li class="codigo">        }</li>
<li class="codigo">       </li>
<li class="codigo">        override public <strong>function</strong> clone():Event {</li>
<li class="codigo">            return <strong>new</strong> LoginEvent(username,password);</li>
<li class="codigo">        }</li>
<li class="codigo">   </li>
<li class="codigo">    }</li>
<li class="codigo">}</li>
</ul>
<p><strong>Code Example 1</strong> - Custom Event</p>
<h4><strong>Comandos</strong></h4>
<p>Os comandos dentro de um atual aplicativo Cairngorm &#8220;comando&#8221; da aplicação. Mesmo no próximo tutorial onde será interagindo com um servidor, o comando ainda fará a maioria dos trabalhos. Neste exemplo, você irá criar um componente que irá receber o nome de usuário e a senha do LoginEvent, verificar os valores contra valores  hard-coded e, em seguida, mudar o workflowState no ModelLocator se os valores estão corretos. O exemplo a seguir executa estas etapas (mas não tem os valores hard-coded incluídos - que serão cobertas no vídeo).</p>
<p>A primeira coisa a notar sobre o código abaixo no Código Exemplo 2 é que o LoginCommand implementa ICommand. Para conseguir isso a classe ICommand também é importado. Além disso, você vai notar o código boilerplate que você usou no passado para trazer no ModelLocator. Para implementar correctamente ICommand, o método execute () também é criado. Ele recebeu um evento do tipo CairngormEvent (tem que ser CairngormEvent e não LoginEvent para implementar correctamente ICommand). Para utilizar corretamente o caso, você precisará fazer um cast com este evento do tipo LoginEvent (o processo de casting será explicado no vídeo). A verdadeira lógica foi deixada fora deste comando, mas você pode ver que as atualizações ModelLocator de view. Depois que a lógica é implementada esta linha de código seria provavelmente colocado dentro de uma condição <strong>IF()</strong>.</p>
<p><strong>Actionscript:</strong></p>
<ul>
<li class="codigo">package net.davidtucker.CairngormSample.commands {</li>
<li class="codigo">   </li>
<li class="codigo">    import com.adobe.cairngorm.commands.ICommand;</li>
<li class="codigo">    import com.adobe.cairngorm.control.CairngormEvent;</li>
<li class="codigo">    import net.davidtucker.CairngormSample.events.LoginEvent;</li>
<li class="codigo">    import net.davidtucker.CairngormSample.model.ViewModelLocator;</li>
<li class="codigo">       </li>
<li class="codigo">    public <strong>class</strong> LoginCommand implements ICommand {</li>
<li class="codigo">       </li>
<li class="codigo">        public <strong>var</strong> modelLocator:ViewModelLocator = ViewModelLocator.getInstance();</li>
<li class="codigo">       </li>
<li class="codigo">        public <strong>function</strong> LoginCommand() {</li>
<li class="codigo">        }</li>
<li class="codigo">       </li>
<li class="codigo">        public <strong>function</strong> execute(event:CairngormEvent):void {</li>
<li class="codigo">       </li>
<li class="codigo">            <strong>var</strong> loginEvent:LoginEvent = event as LoginEvent;</li>
<li class="codigo">           </li>
<li class="codigo">            <em>// COMMAND LOGIC</em></li>
<li class="codigo">           </li>
<li class="codigo">            modelLocator.workflowState = ViewModelLocator.WELCOME_SCREEN;</li>
<li class="codigo">           </li>
<li class="codigo">        }</li>
<li class="codigo">    }</li>
<li class="codigo">}</li>
</ul>
<p><strong>Code Example 2</strong> - Cairngorm Command</p>
<h4><strong>Controle de Frente (Front Controller)</strong></h4>
<p>Tal como referido anteriormente, o FrontController mapeia seus comandos CairngormEvents específicos. Sem isso, o evento jamais se integrará no fluxo Cairngorm. A classe estende FrontController e tem dois métodos: o método constructor e initialize o. O método initialize é onde você irá utilizar o método addCommand para mapear seus eventos de comandos (como se pode ver com o LoginEvent e LoginCommand).</p>
<h4><strong>Actionscript:</strong></h4>
<ul>
<li><span class="codigo">package net.davidtucker.CairngormSample.control { </span></li>
<li><span class="codigo">    </span></li>
<li><span class="codigo">    import com.adobe.cairngorm.control.FrontController;</span></li>
<li><span class="codigo">    </span></li>
<li><span class="codigo">    import net.davidtucker.CairngormSample.commands.*;</span></li>
<li><span class="codigo">    import net.davidtucker.CairngormSample.events.*;</span></li>
<li><span class="codigo">    </span></li>
<li><span class="codigo">    public <strong>class</strong> SampleController extends FrontController { </span></li>
<li><span class="codigo">    </span></li>
<li><span class="codigo">        public <strong>function</strong> SampleController() { </span></li>
<li><span class="codigo">            this.initialize();</span></li>
<li><span class="codigo">        } </span></li>
<li><span class="codigo">        </span></li>
<li><span class="codigo">        public <strong>function</strong> initialize():void { </span></li>
</ul>
<ol start="15" type="1">
<li><span class="codigo">            </span></li>
<li><span class="codigo">            <em>//ADD COMMANDS</em> </span></li>
<li><span class="codigo">            this.addCommand(LoginEvent.LOGIN,LoginCommand);</span></li>
<li><span class="codigo">            </span></li>
<li><span class="codigo">        } </span></li>
<li><span class="codigo">    </span></li>
<li><span class="codigo">    } </span></li>
<li><span class="codigo">} </span></li>
</ol>
<p><strong>Code Example 3</strong> - The Cairngorm FrontController</p>
<p>Simplesmente criar um FrontController não é suficiente. Como qualquer classe que tem que ser instanciada dentro de sua aplicação. Código Exemplo 4 ilustra a forma de instanciar seu FrontController no Main.mxml de sua aplicação. Você só precisa adicionar o diretório como um controle XML Namespace e, em seguida, incluir a tag FrontController no arquivo.</p>
<h4><strong>mxml:</strong></h4>
<ul>
<li class="codigo"><strong>&lt;</strong>?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?<strong>&gt;</strong></li>
<li class="codigo"><strong>&lt;mx</strong>:Application xmlns:mx=&#8221;http://www.adobe.com/2006/mxml&#8221;</li>
<li class="codigo">    xmlns:control=&#8221;net.davidtucker.CairngormSample.control.*&#8221;</li>
<li class="codigo">    layout=&#8221;absolute&#8221;<strong>&gt;</strong></li>
<li class="codigo">   </li>
<li class="codigo">    <strong>&lt;control</strong>:FrontController id=&#8221;controller&#8221; <strong>/&gt;</strong></li>
<li class="codigo"><strong>&lt;/mx</strong>:Application<strong>&gt;</strong></li>
</ul>
<p><strong>Code Example 4</strong> - Integrating a FrontController</p>
<p>Agora que você tem visto os elementos básicos de um projeto Cairngorm, você pode realmente construir a amostra de trabalho com o vídeo. Como sempre, o código pedido está abaixo.</p>
<p>Tradução do original inglês: <a href="http://www.davidtucker.net/2007/10/29/cairngorm-part-3/"><font color="#d9d351">http://www.davidtucker.net</font></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=52</wfw:commentRss>
		</item>
		<item>
		<title>Iniciando com Cairngorm – Parte 2</title>
		<link>http://www.flexbuilder.direciona.com/?p=51</link>
		<comments>http://www.flexbuilder.direciona.com/?p=51#comments</comments>
		<pubDate>Fri, 22 Feb 2008 02:55:37 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[Flex / Cairngorm]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=51</guid>
		<description><![CDATA[Part 2 - Usando uma ModelLocator para Gerenciar A View
Nota: Tal como acontece com todos os tutoriais que virão nesta série, esta lição tem duas partes. Em primeiro lugar, no artigo você vai aprender a teoria por trás do tema e, em seguida, no vídeo que você vai fazer um verdadeiro &#8221; code-along &#8220;. O [...]]]></description>
			<content:encoded><![CDATA[<h3>Part 2 - Usando uma ModelLocator para Gerenciar A View</h3>
<p>Nota: Tal como acontece com todos os tutoriais que virão nesta série, esta lição tem duas partes. Em primeiro lugar, no artigo você vai aprender a teoria por trás do tema e, em seguida, no vídeo que você vai fazer um verdadeiro &#8221; code-along &#8220;. O artigo dará algumas instruções de como configurar o seu projeto de &#8221; code-along &#8220;.</p>
<p>No tutorial anterior você aprendeu as vantagens de usar um ModelLocator para manipular os dados dentro de um aplicativo, no entanto, a vantagem do ModelLocator padrão se estende para além da gestão de dados. Pode manipular a &#8220;view&#8221; de uma aplicação tão bem. Para ver como funciona na gestão Cairngorm, primeiro você precisa criar um novo projeto chamado &#8220;ViewManager&#8221; e o nome do arquivo principal aplicação &#8220;Main.mxml&#8221;. Para este projeto, você também vai necessitar adicionar o Cairngorm.swc para construir o seu projeto (como descrito na parte 1). Também será necessário criar duas novas pastas dentro do &#8220;src&#8221; pasta: view e model. Quando estiver concluído, o projeto deve ser parecido à Figura 1 abaixo.<br />
<img border="0" width="201" src="http://www.davidtucker.net/wp-content/uploads/u1.jpg" alt="Cairngorm Project Window" height="225" /><br />
<strong>Figure 1</strong> - ViewManager Project</p>
<p>Em seguida, você precisará ter o código do ModelLocator do tutorial anterior e colocá-lo dentro do seu aplicativo. Já publicamos o código abaixo para sua conveniência.</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo">package model {</li>
<li class="codigo">    import com.adobe.cairngorm.model.IModelLocator;</li>
<li class="codigo">    [Bindable]</li>
<li class="codigo">    public <strong>class</strong> ViewModelLocator implements IModelLocator {</li>
<li class="codigo">        <em>// Single Instance of Our ModelLocator</em></li>
<li class="codigo">        private static <strong>var</strong> instance:ViewModelLocator;</li>
<li class="codigo">        public <strong>function</strong> ViewModelLocator(enforcer:SingletonEnforcer) {</li>
<li class="codigo">        if (enforcer == <strong>null</strong>) {</li>
<li class="codigo">                throw <strong>new</strong> Error( &#8220;You Can Only Have One ViewModelLocator&#8221; );</li>
<li class="codigo">            }</li>
<li class="codigo">        }</li>
<li class="codigo">        <em>// Returns the Single Instance</em></li>
<li class="codigo">        public static <strong>function</strong> getInstance() : ViewModelLocator {</li>
<li class="codigo">            if (instance == <strong>null</strong>) {</li>
<li class="codigo">                instance = <strong>new</strong> ViewModelLocator( <strong>new</strong> SingletonEnforcer );</li>
<li class="codigo">            }</li>
<li class="codigo">            return instance;</li>
<li class="codigo">        }</li>
<li class="codigo">        <em>//DEFINE YOUR VARIABLES HERE</em></li>
<li class="codigo">    }</li>
<li class="codigo">}</li>
<li class="codigo"><em>// Utility Class to Deny Access to Constructor</em></li>
<li class="codigo"><strong>class</strong> SingletonEnforcer {}</li>
</ol>
<p><strong>Example 1</strong> - The ModelLocator from <a href="http://www.flexbuilder.direciona.com/?p=50">Part 1</a></p>
<p>Se precisar de mais informação sobre a ModelLocator, volte a parte 1 do tutorial.<br />
O único item que deve ser mudado na ModelLocator é a declaração &#8220;package&#8221;. Para este projeto, ser-lhe-á a colocação ModelLocator na pasta &#8220;model&#8221;, de modo que o caminho do package simplesmente precisa de mim &#8220;model&#8221; (ele já foi corrigido acima). Também será necessário adicionar uma variável à sua ModelLocator inicialmente. Esta variável será chamado &#8220;workflowState&#8221; e será do tipo &#8220;uint&#8221;. A declaração será semelhante a este:</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo">public <strong>var</strong> workflowState:uint = 0;</li>
</ol>
<p><strong>Example 2</strong> – definindo a variável workflowState<br />
Esta variável será utilizada para &#8220;controlar&#8221; a view da sua aplicação. A forma mais comum de conseguir isto é usar um ViewStack. Se você não estiver familiarizado com um ViewStack, sinta-se livre para ler esta informação. Um ViewStack tem uma propriedade denominada &#8220;selectedIndex&#8221;. Este valor numérico que define &#8221; child &#8221; é visível no ViewStack. Considere o seguinte código:</p>
<h4><strong>mxml:</strong></h4>
<ol class="codigo">
<li><strong>&lt;mx</strong>:ViewStack id=&#8221;myViewStack&#8221;<strong>&gt;</strong></li>
<li>  <strong>&lt;mx</strong>:HBox id=&#8221;box1&#8243;<strong>&gt;</strong></li>
<li>    <strong>&lt;mx</strong>:Label text=&#8221;I am Box 1&#8243; <strong>/&gt;</strong></li>
<li>  <strong>&lt;/mx</strong>:HBox<strong>&gt;</strong></li>
<li>  <strong>&lt;mx</strong>:HBox id=&#8221;box2&#8243;<strong>&gt;</strong></li>
<li>    <strong>&lt;mx</strong>:Label text=&#8221;I am Box 2&#8243; <strong>/&gt;</strong></li>
<li>  <strong>&lt;/mx</strong>:HBox<strong>&gt;</strong></li>
<li>  <strong>&lt;mx</strong>:HBox id=&#8221;box3&#8243;<strong>&gt;</strong></li>
<li>    <strong>&lt;mx</strong>:Label text=&#8221;I am Box 3&#8243; <strong>/&gt;</strong></li>
<li>  <strong>&lt;/mx</strong>:HBox<strong>&gt;</strong></li>
<li><strong>&lt;/mx</strong>:ViewStack<strong>&gt;</strong></li>
</ol>
<p><strong>Example 3</strong> - A exemplo simples de ViewStack<br />
Inicialmente, o valor de selectedIndex é 0. Com esta configuração &#8220;box1&#8243; seria visível. Se você emitir o seguinte comando</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo">myViewStack.selectedIndex = 1;</li>
</ol>
<p><strong>Example 4</strong> - Configurando o selectedIndex<br />
Então a caixa denominada &#8220;box2&#8243; seria visível. No entanto, se você aplicar o ModelLocator a este conceito, você poderia usar o workflowState varaible para definir a propriedade selectedIndex. Ao vincular a selectedIndex ao valor workflowState, agora você tem controle total sobre o que é apresentado no ViewStack de seu ModelLocator</p>
<h4><strong>mxml:</strong></h4>
<ol>
<li class="codigo"><strong>&lt;mx</strong>:ViewStack id=&#8221;myViewStack&#8221; selectedIndex=&#8221;{modelLocator.workflowState}&#8221;<strong>&gt;</strong></li>
<li class="codigo">  &#8230;</li>
<li class="codigo"><strong>&lt;/mx</strong>:ViewStack<strong>&gt;</strong></li>
</ol>
<p><strong>Example 5</strong> - vinculando o selectedIndex ao workflowState</p>
<h4>Definir constantes para melhorar o código</h4>
<p>Seria simples para manipular a view utilizando este método, porém, poderia levar o código potencialmente confuso. Por exemplo, suponha que você tem os seguintes:</p>
<p>• Um ViewStack com dois filhos: um login e uma tela Welcome<br />
• O ViewStack&#8217;s selectedIndex está vinculado à propriedade workflowState<br />
• Um botão login que executa a ação mostrada no Exemplo 4.</p>
<p>Isto pode parecer como se ele funcionasse corretamente, mas ele não conta para quaisquer alterações. Se outro filho é adicionado à ViewStack, poderia ficar fora da ordem. Tem de haver uma maneira melhor para definir manualmente a propriedade selectedIndex. Para conseguir isso, você só precisa definir constantes dentro da ModelLocator</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo"><em>//DEFINE YOUR VARIABLES HERE</em></li>
<li class="codigo">public <strong>var</strong> workflowState:uint = 0;</li>
<li class="codigo"><em>// DEFINE VIEW CONSTANTS</em></li>
<li class="codigo">public static const LOGIN_SCREEN = 0;</li>
<li class="codigo">public static const WELCOME_SCREEN = 1;</li>
</ol>
<p><strong>Example 6</strong> – Definindo constantes View no ModelLocator.</p>
<p>Ao usar esse método, você só tem que alterar o valor em um único local, se o número de children ou a ordem das children mudarem no ViewStack. Agora, você deve atribuir o botão login as seguintes medidas para o evento clique.</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo">myViewStack.selectedIndex = ViewModelLocator.WELCOME_SCREEN;</li>
</ol>
<p><strong>Example 7</strong> – Fixando a View com constantes definidas.</p>
<p>Não só para proteger contra futuras mudanças, você também fez o seu código muito mais lógico. Outro desenvolvedor poderia facilmente analisar o código e entender o processo sem ter de referenciar todas as children no ViewStack.</p>
<p>Tradução do original inglês: <a href="http://www.davidtucker.net/2007/10/18/cairngorm-part-2/">http://www.davidtucker.net</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=51</wfw:commentRss>
		</item>
		<item>
		<title>Iniciando com Cairngorm – Parte 1</title>
		<link>http://www.flexbuilder.direciona.com/?p=50</link>
		<comments>http://www.flexbuilder.direciona.com/?p=50#comments</comments>
		<pubDate>Fri, 22 Feb 2008 02:41:25 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[Flex / Cairngorm]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=50</guid>
		<description><![CDATA[Falei sobre Cairngorm 2,2 no Flex Max Bootcamp no decurso desta semana. Muitas pessoas estavam interessadas em Cairngorm, mas eu tinha apenas cerca de 10 minutos para explicar os conceitos básicos de Cairngorm. Eu acho que a maneira mais fácil de ajudar estas pessoas é fazer uma rápida série sobre os benefícios de Cairngorm no [...]]]></description>
			<content:encoded><![CDATA[<p>Falei sobre Cairngorm 2,2 no Flex Max Bootcamp no decurso desta semana. Muitas pessoas estavam interessadas em Cairngorm, mas eu tinha apenas cerca de 10 minutos para explicar os conceitos básicos de Cairngorm. Eu acho que a maneira mais fácil de ajudar estas pessoas é fazer uma rápida série sobre os benefícios de Cairngorm no meu blog. Esta série irá combinar artigos com &#8220;code-along&#8221; vídeos.</p>
<p>Aviso: Não afirmo ser um &#8220;expert&#8221; na Cairngorm - estou longe disso. No entanto, tenho usado Cairngorm em vários grandes projetos (tanto no Georgia Tech e no meu próprio negócio). Estou certamente aberto a correções, caso você veja que cometi algum erro neste projeto. Se você quiser que &#8220;os peritos&#8221; check out: Steven Webster, Alistair McLeod, Alex Uhlmann, e Peter Martin.</p>
<p>Nota: Os rapazes no Adobe Consulting (que desenvolveu Cairngorm) estão investigando algumas coisas novas com o quadro como um todo. É possível (na verdade provável), que algumas dessas coisas vão mudar no futuro. Uma das áreas muito específicas da mudança é o Model Locator.</p>
<h3><strong>Parte 1 – Usando um Model Locator</strong></h3>
<p>O Model Locator pattern é utilizado em Cairngorm, mas você não tem que ter uma plena implementação do Cairngorm para usar o pattern. Primeiro, vamos cobrir aquilo que você recebe de benefícios ao utilizar um modelo Locator.</p>
<p>Um Modelo Locator é um repositório centralizado de todos os dados que é necessário em toda a sua aplicação. Seus dados irão existir dentro de uma &#8220;Classe Singleton&#8221;. Esta &#8220;classe&#8221; pode ter apenas um exemplo de si mesmo. Por que isso é importante? Deixe-me dar-lhe um exemplo.</p>
<p>Temos grandes mini-notepads no trabalho que eu uso para anotar dados enquanto eu trabalho. No entanto, por vezes, eu perco um bloco - obtenho um novo e, em seguida, localizo o antigo. Depois de tanto ter sido largamente utilizados - é realmente difícil descobrir qual bloco eu estava usado para anotar um pedaço de informação de uma semana atrás. Esse é um exemplo simples - mas imagina se eu tivesse 20 blocos? Isto poderia deixar vocês loucos.</p>
<p>Da mesma forma, você poderá ter uma &#8220;classe&#8221; que recebe &#8220;instanciado&#8221; 20 vezes dentro de sua aplicação (mesmo que você não quer dizer para ela o que fazer). A maneira mais fácil de eliminar este problema é usar um único “Singleton”. Um singleton é uma classe que nunca é &#8220;criada&#8221; na forma tradicional. Tem uma regra principal - não mais que um por si só pode existir, em qualquer momento. Como ele faz isso? Eu mostrarei no exemplo Model Locator.</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo">package net.davidtucker.CairngormSample.model {</li>
<li class="codigo">    import com.adobe.cairngorm.model.IModelLocator;</li>
<li class="codigo">   </li>
<li class="codigo">    [Bindable]</li>
<li class="codigo">    public <strong>class</strong> ModelLocator implements IModelLocator {</li>
<li class="codigo">       </li>
<li class="codigo">        <em>// Single Instance of Our ModelLocator</em></li>
<li class="codigo">        private static <strong>var</strong> instance:ModelLocator;</li>
<li class="codigo">        public <strong>function</strong> ModelLocator(enforcer:SingletonEnforcer) {</li>
<li class="codigo">        if (enforcer == <strong>null</strong>) {</li>
<li class="codigo">                throw <strong>new</strong> Error( &#8220;You Can Only Have One ModelLocator&#8221; );</li>
<li class="codigo">            }</li>
<li class="codigo">        }</li>
<li class="codigo">        </li>
<li class="codigo">        <em>// Returns the Single Instance</em></li>
<li class="codigo">        public static <strong>function</strong> getInstance() : ModelLocator {</li>
<li class="codigo">               </li>
<li class="codigo">            if (instance == <strong>null</strong>) {</li>
<li class="codigo">                instance = <strong>new</strong> ModelLocator( <strong>new</strong> SingletonEnforcer );</li>
<li class="codigo">            }</li>
<li class="codigo">            return instance;</li>
<li class="codigo">        }</li>
<li class="codigo">       </li>
<li class="codigo">        <em>//DEFINE YOUR VARIABLES HERE        </em></li>
<li class="codigo">       </li>
<li class="codigo">    }</li>
<li class="codigo">}</li>
</ol>
<p><em>// Classe </em>Utilitária para negar o acesso ao construtor</p>
<ol>
<li>
<h4><strong>class</strong> SingletonEnforcer {}</h4>
</li>
</ol>
<p>Este código pode parecer um pouco assustador no início, mas confiem em mim que não é tão difícil como pode parecer. Em primeiro lugar, temos o nosso pacote definição e nós importamos algumas classes. Neste momento sabemos que teremos o IModelLocator interface. Para utilizá-lo vai precisar do Cairngorm SWC que pode ser encontrado aqui: http://labs.adobe.com/wiki/index.php/Cairngorm:Cairngorm2.2:Download. Além disso, note - você pode construir um model Locator sem Cairngorm, e faço isso com freqüência em pequenos projectos (você acabou de deixar de fora os códigos “implements IModelLocator” e “import com.adobe.cairngorm.model.IModelLocator “ do Model Locator).</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo">[Bindable]</li>
<li class="codigo">public <strong>class</strong> ModelLocator implements IModelLocator {</li>
<li class="codigo">       </li>
<li class="codigo">     <em>// Single Instance of Our ModelLocator</em></li>
<li class="codigo">     private static <strong>var</strong> instance:ModelLocator;</li>
</ol>
<p>Em seguida, temos a nossa definição da classe. É importante que você use o Bindable metatag diretamente acima de sua classe. Isso permitirá que todas as nossas variáveis que definimos dentro do Modelo Locator serão utilizadas para vinculação. Também irá avançar e criar uma variável. Ela será chamada de &#8220;instance&#8221; e será do tipo ModelLocator. Esta será a variável onde vamos guardar as instâncias das classes. Também será denotado como uma propriedade &#8220;static&#8221;. Se você não tem certeza o que é uma propriedade “static”, ok - vamos discutir na nossa próxima lição.</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo">public <strong>function</strong> ModelLocator(enforcer:SingletonEnforcer) {</li>
<li class="codigo">     if (enforcer == <strong>null</strong>) {</li>
<li class="codigo">          throw <strong>new</strong> Error( &#8220;You Can Only Have One ModelLocator&#8221; );</li>
<li class="codigo">     }</li>
<li class="codigo">}</li>
</ol>
<p>Este é seguido pelo construtor. O construtor assume argumento - &#8220;enforcer&#8221;. Você irá notar que esta &#8220;enforcer&#8221; tem um tipo &#8220;SingletonEnforcer&#8221;, que é definido logo após a nossa classe. Segue-se a lógica de que:</p>
<p>• Quando você coloca uma classe em um arquivo Actionscript abaixo da classe principal, ela só está disponível para essa classe. Muitas pessoas referem-se a estes como &#8220;utility classes&#8221; (embora muitas pessoas usam esse termo com um alcance muito mais amplo).<br />
• Se o construtor exige este argumento - só então a nossa classe principal pode criar uma instância de si mesmo, porque não temos acesso a classe &#8220;SingletonEnforcer&#8221; - só a principal classe tem esse acesso.<br />
• Não iremos acessar a nossa classe na forma normal, usando a declaração &#8220;new&#8221;, porque não se pode chamar o construtor (vou mostrar-lhe como vamos fazê-lo em um bit).</p>
<p>Assim que chegar dentro do construtor, temos algumas linhas certifique-se de que as coisas funcionem como planejadas. A declaração &#8220;if&#8221; garante que passamos um &#8220;enforcer&#8221; válido. Se não, haverá um Erro &#8220;Você Pode Ter Apenas Um ModelLocator&#8221;.</p>
<h4><strong>Actionscript:</strong></h4>
<ol>
<li class="codigo"><em>// Returns the Single Instance</em></li>
<li class="codigo">public static <strong>function</strong> getInstance() : ModelLocator {</li>
<li class="codigo">     if (instance == <strong>null</strong>) {</li>
<li class="codigo">          instance = <strong>new</strong> ModelLocator( <strong>new</strong> SingletonEnforcer );</li>
<li class="codigo">     }</li>
<li class="codigo">     return instance;</li>
<li class="codigo">}</li>
</ol>
<p>A função &#8220;getInstance&#8221; é a forma como iremos acessar nosso ModelLocator do nosso pedido. Esta função apenas passa para trás o &#8220;exemplo&#8221; da classe. Se ela ainda não existe, ele irá criá-la. Podemos agora começar um ModelLocator usando o código a seguir</p>
<h4><strong>Actionscript:</strong></h4>
<p class="codigo"><strong>var</strong> model:ModelLocator = ModelLocator.getInstance();</p>
<p>Tradução do original inglês: <a href="http://www.davidtucker.net/2007/10/07/getting-started-with-cairngorm-–-part-1/">http://www.davidtucker.net</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=50</wfw:commentRss>
		</item>
		<item>
		<title>Usando parâmetro Query String</title>
		<link>http://www.flexbuilder.direciona.com/?p=49</link>
		<comments>http://www.flexbuilder.direciona.com/?p=49#comments</comments>
		<pubDate>Thu, 27 Dec 2007 18:17:51 +0000</pubDate>
		<dc:creator>Quinhone</dc:creator>
		
		<category><![CDATA[Flex / Flex Builder]]></category>

		<category><![CDATA[Flex Builder]]></category>

		<guid isPermaLink="false">http://www.flexbuilder.direciona.com/?p=49</guid>
		<description><![CDATA[Quando usar Flex Data Service, você pode adicionar parâmetros query string para amarar o pedido do cliente, e usar os valores daqueles parâmetros em qualquer aplicação Flex. Na realidade, o Flex e suporta variáveis de pedido GET passado como nome-valor no URL.
Quando criado a envoltura, O Flex Data Service converte os parâmetros para um flashVars. [...]]]></description>
			<content:encoded><![CDATA[<p>Quando usar Flex Data Service, você pode adicionar parâmetros query string para amarar o pedido do cliente, e usar os valores daqueles parâmetros em qualquer aplicação Flex. Na realidade, o Flex e suporta variáveis de pedido GET passado como nome-valor no URL.</p>
<p>Quando criado a envoltura, O Flex Data Service converte os parâmetros para um flashVars. Como resultado, você pode acessar parâmetros query string em sua aplicação Flex se você estiver usando Flex Data Service ou se você implementar lado-servidor que lida gerando uma envoltura. Por exemplo, supõe que você está usando a camada-web, e você solicita a string seguinte na bara de endereço do Browser:</p>
<p class="codigo">http://localhost:8101/flex/charts/PieChart1.mxml?fname=Nick&amp;lname=Danger</p>
<p>o Flex adiciona aqueles valores como variáveis flashVars para o script.</p>
<p><strong>NOTA</strong></p>
<p>Você não pode passar parâmetros query string para aplicação Flex que roda dentro do Flash Player independente.</p>
<p>também pode anexar parâmetros query string para o &lt;objeto&gt; e &lt;embutir&gt; na propriedades src das tags no script. A propriedade src identifica o local do arquivo SWF da Aplicação Flex. Você acessa estes do mesmo modo que você acessa parâmetros da query string na barra de endereço do Browser.</p>
<p>O exemplo seguinte junta parâmetros Query String a propriedade src no script personalizado:</p>
<pre class="codigo">&lt;object ... &gt; 

&lt;param name='src' value='TitleTest.mxml.swf?myName=Danger'&gt;
     ...
&lt;embed src='TitleTest.mxml.swf?myName=Danger' ... /&gt; 

&lt;/object&gt;</pre>
<p>Como com propriedades flashVars, você pode acessa o valor do parâmetros em suas Aplicações Flex no objeto de parâmetros:</p>
<p class="codigo">Var myName:String = Application.application.parameters.myName;</p>
<p>Se seu usuário solicita o arquivo SWF diretamente, sem um script, você pode acessar as variáveis na query string sem fornecer código adicional. O URL seguinte passa pelo nome Nick e a cidade natal São Francisco para a aplicação Flex:</p>
<p><span class="codigo">http://localhost:8100/flex/myApp.swf?<strong>myName=Nick&amp;myHometown=San Francisco</strong></span></p>
<p><!--      document.write(WWHRelatedTopicsDivTag() + WWHPopupDivTag());     // --></p>
<p class="codigo">&nbsp;</p>
<p><a target="_blank" href="http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&amp;file=passingarguments_086_06.html">Traduzido da documentação oficial do ©Adobe ©Flex</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.flexbuilder.direciona.com/?feed=rss2&amp;p=49</wfw:commentRss>
		</item>
	</channel>
</rss>
