30 de noviembre de 2009

Compilar CSS a SWF, estilos en sub aplicaciones

Gracias a mi compañero Ciro, que vió la opción Compile CSS to SWF, me dió la solución a un problema que yo había tenido en otra ocasión y no supe como resolverlo, más que copiar todo el estilo en el css principal.

Les explico, cuando trabajas con sub-aplicaciones según la documentación de flex Developing and loading sub-applications los estilos no se heredan, y cada aplicación carga su propio estilo, pero resulta que siempre que hacía la carga de mis subapps (de ahora en adelante les diré así) el estilo no se cargaba., leyendo un poco el PDF, dan la opción de cargar el estilo en tiempo de ejecución, intenté hacerlo con el siguiente código

private function loadStyle():void {
/* Load style module into a child ApplicationDomain by specifying
ApplicationDomain.currentDomain. */
var eventDispatcher:IEventDispatcher = StyleManager.loadStyleDeclarations(
currentTheme + ".swf", true, false, ApplicationDomain.currentDomain);
eventDispatcher.addEventListener(StyleEvent.COMPLETE, completeHandler);
}
La variable current theme es si trabajas con Themes para darle estilo a tu aplicación, yo uso css plano, cambiando un poco la línea

currentTheme + ".swf", true, false, ApplicationDomain.currentDomain); 
por

"estiloSubapp.css", true, false, ApplicationDomain.currentDomain); 
me apareció un error que dice lo siguiente

Error: No se puede cargar el estilo (Error #2124: Loaded file is an unknown type. URL: style.css). style.css.
at ()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\styles\StyleManagerImpl.as:858]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at ModuleInfoProxy/moduleEventHandler()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\modules\ModuleManager.as:1101]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at ModuleInfo/errorHandler()[C:\autobuild\3.4.0\frameworks\projects\framework\src\mx\modules\ModuleManager.as:734]
]
Lo que significa que el StyleManager quería un ".swf " y no un ".css", le comenté a Ciro y es cuando me habla de que él había visto la opción Compile CSS to SWF, ésta opción aparece si le damos botón derecho al archivo ".css" en el panel de navegación del Flex Builder.

Dejando marcada Compile CSS to SWF (ahh por cierto, no esperen encontrar en algún lado el ccs compilado swf, porque no aparece, no se como funcionará) y cambiando nuevamente la línea por. Modificado de acuerdo al comentario hecho por Ciro Durán

Dejando seleccionada la opción Compile CSS to SWF , el compilador automaticamente compila el ".css" a ".swf" y lo exporta en nuestra carpeta "bin-debug" o cuando hagas "export release build" en la carpeta que hagas el exportado.


"estiloSubapp.swf", true, false, ApplicationDomain.currentDomain);
devinez quoi!!,, No tuve ningún problema en cargar mi sub aplicación con su estilo como es.

Saludos, espero les resulte útil.

23 de noviembre de 2009

Flash&Flex developer's magazine

Aprovecho la oportunidad que me da mi amigo Pedro, de editar en su blog para aportar algunas cosas, que en mi aprendizaje voy encontrando, y que como no es camino nuevo, si no camino por el que han de pasar los que empiezan detrás, creo servirá de ayuda.

Quería enlazaros a esta web www.ffdmag.com, especialmente creada para desarrolladores en tecnologías flash y flex.

Tiene apartados muy interesantes como tutoriales de as3, información de eventos, enlaces a otras páginas específicas de flex, componentes y programas desarrollados en las citadas tecnologías, noticias tecnológicas relacionadas con flash&flex, y sobre todo, lo que creo más interesante de todo ello, te puedes descargar revistas con artículos técnicos muy interesantes sobre estas tecnologías, ¡¡totalmente gratis!!.

Que os aproveche.

20 de noviembre de 2009

warning: unable to bind to property '' on class ''

Uno de los warning que más detesto en Flex “warning: unable to bind to property 'X' on class 'X'”. Para evitar éste warning en nuestra código, causando posibles errores en la asignación de los datos de nuestras clases, se debe tener en cuenta estas tres (3) cosas:

  1. La clase debe estar marcada como [Bindable]
  2. Todo atributo Bindable debe tener su setter y su getter respectivo.
  3. Los atributos preferiblemente deben ser private (es mi práctica) y por supuestos public los getter y setters.

Posible código propenso a Warning. Error tipo 1

package
{
public class Usuario
{
public var nombre :String;
public var apellido :String;

public function Usuario()
{
}
}
}




Razón: No está marcada como [Bindable].



Posible código propenso a Warning. Error tipo 2 + tipo 3 de una.



package
{
[Bindable]
public class Usuario
{
private var _nombre :String;
private var _apellido :String;

public function Usuario()
{
}

public function get nombre():String{
return this._nombre;
}

public function set apellido(valor:String):void{
this._apellido = valor;
}

public function get apellido():String{
return this._apellido;
}
}
}




Warning: unable to bind property ‘nombre’ on class ‘Usuario’



Razón: No tenemos el setter para nombre



Teniendo en cuenta estos detalles, el unable to bind property desaparecerá, ah y también usando cuando sea necesario el ObjectProxy.





Feliz fin de semana