Andrés Villagrán Placencia Flex / AS3 / Papervision3D / PHP / Rails Developer

28Jan/107

Comunicación entre componentes/modulos utilizando Singleton

En un post anterior (y muy antiguo) comentaba que se podía utilizar Application.application para comunicarse con la aplicación principal desde un módulo, si bien es cierto esta misma operación se puede realizar a través de eventos, lo cual sería la forma más limpia de hacerlo, hay otra, la cual sería "sucia" pero rápida que es utilizando Singleton.

Lo primero es crear esta clase, como ejemplo:

Util.as

  1. package {
  2. public class Util {
  3. public var variableTemporal:Object;
  4. private static var instance:Util;
  5.  
  6. public static function getInstance():Util {
  7. if(instance == null) {
  8. instance = new Util();
  9. }
  10. return instance;
  11. }
  12. }
  13. }

Esta clase permitirá almacenar en la variable "variableTemporal" los objetos que queramos almacenar y acceder desde cualquier componente/modulo, obviamente en vez de utilizar una variable publica, podemos crear funciones setter/getter.

Luego, debemos instanciar la clase en la aplicación principal:

Prueba.mxml

  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  4. xmlns:s="library://ns.adobe.com/flex/spark"
  5. creationComplete="creationCompleteHandler(event)">
  6. <fx:Script>
  7. <![CDATA[
  8. import mx.events.FlexEvent;
  9.  
  10. protected function creationCompleteHandler(event:FlexEvent):void {
  11. Util.getInstance();
  12.  
  13. // Guardo en la variableTemporal
  14. // un valor para hacer la prueba
  15. Util.getInstance().variableTemporal = {prueba: 'Hola'};
  16.  
  17. }
  18. ]]>
  19. </fx:Script>
  20. </s:Application>
  21.  

Luego de esto, ya podemos utilizar nuestra clase desde cualquier componente o modulo, por ejemplo:

Prueba.mxml

  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
  4. xmlns:s="library://ns.adobe.com/flex/spark"
  5. xmlns:mx="library://ns.adobe.com/flex/halo"
  6. creationComplete="init()">
  7.  
  8. <fx:Script>
  9. <![CDATA[
  10. private function init():void {
  11. trace("Valor variableTemporal:" + Util.getInstance().variableTemporal.prueba);
  12. }
  13. ]]>
  14. </fx:Script>
  15. </s:Group>
  16.  

Ojalá les sirva de ayuda 😉

22Nov/090

Flash Builder 4: “Content Assist Error”

Probablemente a más de alguno le ha pasado que al intentar utilizar el autocompletado en Flash Builder 4 Beta 2, aparece un popup con un "Content Assist Error", la forma de solucionarlo es:

  1. Cierra Flash Builder 4
  2. Elimina  .metadata/.plugins/com.adobe.flexbuilder.codemodel de tu workspace
  3. Inicia nuevamente Flash Builder

Con esto debería funcionar sin problemas el autocompletado 😀

1Nov/090

E4x en Actionscript3

Investigando, encontré un muy buen post de lo que se puede realizar con E4X en AS3, altamente recomendado.

http://dispatchevent.org/roger/as3-e4x-rundown/

Tagged as: , , , No Comments
23May/092

Acceder a componente padre desde itemRenderer

Una forma útil de acceder a algún componente padre desde un itemRenderer personalizado es a través de la propiedad owner, como ejemplo práctico tendremos un List y un componente del tipo VBox con un botón que llamará a una función de la lista:

Lista.mxml

  1.  
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <mx:List xmlns:mx="http://www.adobe.com/2006/mxml"
  4. itemRenderer="itemRender">
  5. <mx:Script>
  6. <![CDATA[
  7. public function getClick(datos:String):void {
  8. trace("Datos: " + datos);
  9. }
  10. ]]>
  11. </mx:Script>
  12. </mx:List>
  13.  

itemRender.mxml

  1.  
  2. <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
  3. <mx:Script>
  4. <![CDATA[
  5. public function enviarDatos():void {
  6. var padre:Lista = owner as Lista;
  7. padre.getClick("Enviando datos");
  8. }
  9. ]]>
  10. </mx:Script>
  11. <mx:Button label="Boton" click="enviarDatos()" />
  12. </mx:VBox>
  13.  

Espero que les sirva de ayuda!

23Feb/092

Conector a AMFPHP Simple

Tengo prácticamente tirado el blog, así que pondré a disposición una pequeña clase que desarrollé el otro día 😛

Si no nos gusta utilizar RemoteObjects para cada módulo, ni tampoco queremos usar un Framework más denso, hay  una opción, que es utilizar la clase Servicios y definir los Handlers en las funciones que estimemos convenientes, el código es el siguiente:

  1.  
  2. /** Andrés Villagrán Placencia
  3.   andres@villagranquiroz.cl
  4.   http://www.villagranquiroz.cl
  5. **/
  6. package com.villagranquiroz.utils {
  7. import flash.net.NetConnection;
  8. import flash.net.Responder;
  9.  
  10. import mx.utils.ObjectUtil;
  11.  
  12. public class Servicios
  13. {
  14. private var gateway:String;
  15.  
  16. private var conexion:NetConnection;
  17.  
  18. public function Servicios(amfGateway:String)
  19. {
  20. gateway = amfGateway;
  21. conexion = new NetConnection();
  22. conexion.connect(gateway);
  23.  
  24. }
  25. public function send(nombre:String, result:Function, ... args):void {
  26. var responder:Responder = new Responder(result, onFault);
  27. //No necontré una forma más facil de hacer esto, si alguien sabe como pasar params* me avisa <img src="http://andres.villagranquiroz.cl/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" />
  28. switch(args.length) {
  29. case 0: conexion.call(nombre, responder); break;
  30. case 1: conexion.call(nombre, responder, args[0]); break;
  31. case 2: conexion.call(nombre, responder, args[0], args[1]); break;
  32. case 3: conexion.call(nombre, responder, args[0], args[1], args[2]); break;
  33. case 4: conexion.call(nombre, responder, args[0], args[1], args[2], args[3]); break;
  34. case 5: conexion.call(nombre, responder, args[0], args[1], args[2], args[3], args[4]); break;
  35. case 6: conexion.call(nombre, responder, args[0], args[1], args[2], args[3], args[4], args[5]); break;
  36. }
  37.  
  38. }
  39.  
  40. private function onFault(fault:Object):void {
  41. trace("Error: " + ObjectUtil.toString(fault));
  42. }
  43.  
  44. }
  45. }
  46.  

Como se utiliza?

  1.  
  2. private var servicios:Servicios;
  3.  
  4. // Esta sería la funcion que instancia a los servicios
  5. private function init():void {
  6. servicios = new Servicios("http://www.villagranquiroz.cl/url/amfphp/gateway.php");
  7. }
  8.  
  9. private function llamada():void {
  10. // Con esto realizamos una llamada y asignamos la función que recibirá la respuesta
  11. servicios.send("Prueba.NombreFuncionAMFPHP", NombreFuncionAMFPHPHandler);
  12. // Si la función remota necesita parametros, se ponen despues de el nombre de la función
  13. }
  14. private function NombreFuncionAMFPHPHandler(event:ResultEvent):void {
  15. Alert.show("Respuesta: " + ObjectUtil.toString(event.result));
  16. }
  17.  

Espero que les sirva, también pueden crear una clase que contenga todos los Handlers, así no repiten funciones en los módulos. Recuerden que el ejemplo anterior no está completo, faltan los imports y una que otro código.

21Jan/090

Flex Builder : Desactivar Warnings CSS

Este es un muy buen tip, para eliminar los molestos warnings de CSS (pero mantener los otros), debes agregar a las propiedades de compilación del proyecto la siguiente linea:

-show-unused-type-selector-warnings=false

Con eso ya no tendras esos molestos mensajes, gracias a Daniel R.

7Nov/080

Flex Camp Chile en FayerWayer

FayerWayer ha comentado nuestro evento Flex Camp Chile, estamos muy contentos con el apoyo que nos han brindado, pueden ver más información en: http://www.fayerwayer.com/2008/11/flex-camp-chile/

29Oct/080

Slides charlas introductorias y fotografías

Hoy fue un muy buen día, para haber organizado el viernes las charlas todo salio muy bien, buena asistencia y harto interés, varios quedaron fascinados con SlideRocket (Quienes son auspiciadores de Flex Camp Chile).

Pueden ver las presentaciones aquí:
Introducción a Flex / Adobe AIR:

Flex + Zend Framework:

Fotografías:
http://picasaweb.google.com/avillagranp/20081029CharlasFlex

25Oct/080

Charlas de Flex

Realizaremos charlas en la Universidad del Bío Bío el día Miércoles 29 de Octubre desde las 16:30 hasta las 18:30 en el Auditorio de la Facultad de Ciencias Empresariales, el programa es el siguiente:

16:30 - 17:30 : Introducción a Flex y Adobe AIR
17:30 - 18:30 : Comunicación entre Flex y Zend Framework

Tendremos regalos de Adobe y Villagrán & Quiroz, pueden inscribirse al evento en:
http://www.facebook.com/event.php?eid=36795116643

22Oct/084

Gana un Mac Book AIR

Adobe está regalando un Mac Book AIR con Adobe CS4 preinstalado, como también Flex Builder 3 en su página en facebook: http://www.facebook.com/pages/Adobe-Flex/6130149579

Que tengan suerte!

Tagged as: , , 4 Comments