DClick

Arquivos da categoria "Programação"

Typesafe Enum em Action Script 3

Categorias relacionadas: ActionScript, Flex, Programação
Twitter!

O screencast abaixo é bem simples, porém muito eficiente para proteger o seu código. É importante ressaltar que isso tudo é necessário, pois o Action Script 3 não possui construtor privado e muito menos a implementação nativa de Enum.

Por Rafael Martinelli em 18/February/2010
14 Comentários »


No Translations

Passando parâmetros para Event Handlers – Parte 2

Categorias relacionadas: ActionScript, Flex, Otimização, Programação
Twitter!

Ano passasdo perguntei ao Beck como passar parâmetros para Event Handlers adicionados dinamicamente, porque quando você adiciona Event Listener usando myComp.addEventListener(...), o handler deve esperar apenas o parâmetro do evento. O Beck deu uma solução para isso, mas deixou claro que é apenas uma solução "alternativa", não a melhor delas.

Alguns dias atrás eu estava trabalhando com requisições simultâneas para o servidor e queria guardar o parâmetro da chamada, mas não queria ter que retornar ele do Java, então pensei em uma outra solução para isso. Considerando que seu Event Handler está esperando uma Function que tem somente um parâmetro Event, eu criei uma outra Function que retorna uma Function esperando um parâmetro Event. Mas o segredo é que o escopo de Function Closure permite que você acesse parâmetros tanto da primeira quanto da segunda Function, então você pode fazer isso:

XML:
  1. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" height="100%" width="100%"
  2.     initialize="initApp()">
  3.  
  4.     <mx:Script>
  5.         <![CDATA[
  6.             private function initApp():void
  7.             {
  8.                 buttonA.addEventListener(MouseEvent.CLICK, buttonHandler(0x0000FF));
  9.                 buttonB.addEventListener(MouseEvent.CLICK, buttonHandler(0xFF0000));
  10.             }
  11.  
  12.             private function buttonHandler(color:uint):Function
  13.             {
  14.                 return function(event:MouseEvent):void
  15.                 {
  16.                     box.setStyle("backgroundColor", color);
  17.                 }
  18.             }
  19.         ]]>
  20.     </mx:Script>
  21.  
  22.     <mx:HBox>
  23.         <mx:Button id="buttonA" label="Blue"/>
  24.         <mx:Button id="buttonB" label="Red"/>
  25.     </mx:HBox>
  26.  
  27.     <mx:Box id="box" height="80" width="200" backgroundColor="#FFFFFF"/>
  28.  
  29. </mx:Application>


Mas e agora se você quiser usar esse Event Handler diretamente no MXML? Bem, você não pode fazer isso:

XML:
  1. <mx:Button label="Green" click="buttonHandler(0x00FF00)"/>


Isso não vai funcionar porque a Function que retorna da primeira Function está esperando um parâmetro Event. Então, você pode fazer assim:

XML:
  1. <mx:Button label="Green" click="buttonHandler(0x00FF00)(event)"/>


Estranho, não? Talvez mais um patter do FreaktionScript?

Por André Gil em 19/January/2010
7 Comentários »


No Translations

Tamanho de Container com Base nos Filhos

Twitter!

Quando criamos um Container no Flex e não especificamos seu tamanho, o tamanho será calculado com base nos filhos que são adicionados ao Container. Porém, caso você especifique um tamanho para ele, o tamanho passa a ser o que você especificou e, caso ele seja menor do que o tamanho dos filhos, o componente exibirá uma ScrollBar.

Mas e se você quiser que ele volta a calcular o tamanho para você? Existem alguns casos em que precisamos que isso seja feito, porém não podemos atribuir "null" ou -1 como valor na propriedade para que o Container volte ao comportamento inicial.

Conversando com o Beck Novaes a muito tempo atrás, ele me apontou uma solução para isso. Se vocês olharem no código de alguns componentes do Flex (como o Container ou o UIComponent), vocês encontrarão várias referências para a função isNaN() e, como muitos de vocês devem saber, NaN é o valor atribuído a variáveis numéricas quando não estão com algum valor numérico atribuído.


Portanto, para que o componente calcule o tamanho para você, faça o seguinte:

Actionscript:
  1. myContainer.height = NaN;


Um exemplo completo:

XML:
  1. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" height="100%" width="100%">
  2.  
  3.     <mx:Script>
  4.         <![CDATA[
  5.             private function sizeChanged():void
  6.             {
  7.                 if (group.selection == rbFixed)
  8.                 {
  9.                     myVBox.height = 100;
  10.                 }
  11.                 else
  12.                 {
  13.                     myVBox.height = NaN;
  14.                 }
  15.             }
  16.         ]]>
  17.     </mx:Script>
  18.  
  19.     <mx:HBox>
  20.         <mx:RadioButtonGroup id="group"
  21.             change="sizeChanged()"/>
  22.         <mx:RadioButton id="rbFixed" label="Fixed Size" selected="true"
  23.             group="{group}"/>
  24.         <mx:RadioButton id="rbAuto" label="Auto Size"
  25.             group="{group}"/>
  26.     </mx:HBox>
  27.  
  28.     <mx:VBox id="myVBox" height="100" width="150" backgroundColor="#FFFFFF" horizontalAlign="center">
  29.         <mx:Button label="Botão 1"/>
  30.         <mx:Button label="Botão 2"/>
  31.         <mx:Button label="Botão 3"/>
  32.         <mx:Button label="Botão 4"/>
  33.         <mx:Button label="Botão 5"/>
  34.     </mx:VBox>
  35.  
  36. </mx:Application>


Estranho, não? Seria esse mais um pattern do FreaktionScript?

Por André Gil em 11/January/2010
Nenhum Comentário »


No Translations

Formulários dinâmicos com validadores

Twitter!

Em minha estréia, trago para você este script para agilizar a construção de formulários Flex, ele apenas aponta "o caminho", você deverá implementar com os demais validadores.
Leia o artigo completo »

Por Pedro Silva em 30/September/2009
Nenhum Comentário »


No Translations

Operador Lógico ||= em AS3

Categorias relacionadas: ActionScript, Flex, Otimização, Programação
Twitter!

Bom, poucas pessoas sabem para que serve o operador lógico "||=". Vou tentar explicar um pouco sobre ele.

Na documentação da adobe este operador é descrito da seguinte forma: "Assigns expression1 the value of expression1 || expression2.", traduzindo seria: "Atribui para expressão1 o valor de expressão1 ou da expressão2". Lembrando que para o operador lógico usamos com sintaxe "expressão1 operador expressão2".

Vou mostrar em exemplos mais claros como isso funciona.
Leia o artigo completo »

Por Bruno Sales em 28/August/2009
5 Comentários »


Other Languages:

Escopo de Váriavel em ActionScript 3

Categorias relacionadas: ActionScript, Flex, Programação
Twitter!

Você sabe o que acontece no código abaixo?

ACTIONSCRIPT:
  1. var teste:Boolean = false;
  2. if(teste)
  3. {
  4.     var nome:String;
  5. }
  6. else
  7. {
  8.     nome = "Bruno Sales";
  9. }
  10. trace("Nome: " + nome);

Erro de compilação? Erro de execução? Nenhum dos dois. O resultado do trace é "Nome: Bruno Sales". A variável foi criada mesmo que o código dentro do IF não tivesse sido executado.
Isso acontece pois o ActionScript só tem 2 tipos de escopo: Global e Local; onde Local é considerado todo o escopo dentro de uma função.

Contudo, sugiro para que nunca utilizem algo deste tipo em seu processo de desenvolvimento. A lógica de seu código ficará muito confusa e causará sérios problemas para manutenção e debug.

Por Bruno Sales em 25/July/2009
4 Comentários »


Other Languages:

Spring BlazeDS Integration

Categorias relacionadas: Adobe, Flex, Java, Programação
Twitter!

BlazeDS é um projeto open source da Adobe que fornece serviço remoto e de mensagem, conectando o front-end Flex aos serviços back-end Java. Embora tenha sido possível usar BlazeDS para se conectar aos serviços Spring-managed, isto não tem sido um caminho "natural" para o padrão de desenvolvimento Spring, exigindo um trabalho extra de manter um xml de configuração separado para o BlazeDS. O Spring BlazeDS Integration torna o BlazeDS MessageBroker em um Spring-managed object, abrindo caminhos para uma melhor integração através do paradigma Spring.

Por Rodrigo Facholi em 27/January/2009
2 Comentários »


No Translations