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

29Apr/084

Avances FlexMediaPlayer

Ayer, conversando con el profesor Pedro Campos en la Universidad del Bío Bío, le explicaba mis ideas en relación a la modularidad que explicaba en el post anterior, en ese entonces tenía pensado que FlexMediaPlayer encontrara automaticamente los modulos y los agregue al menu principal (lo cual, ya hacía en ese entonces), pero el problema era el como le daba información especial, por lo cual él me sugirió utilizar configuraciones XML para registrar información, y como Flex maneja facilmente un XML salió bastante rapido esta "Feature", es más menos algo así:

private function FindPreferencesMenus():XMLList {

var preferencesPath:String = "modules/preferences/";

var directory:File = File.applicationDirectory.resolvePath(preferencesPath);

var contents:Array = directory.getDirectoryListing();

var fileStream:FileStream = new FileStream();

var file:File;

var xml:String;

var configXML:XML;

xml = "<menus>";

for (var i:uint = 0; i < contents.length; i++)

{

if(contents[i].isDirectory) {

fileStream.open(File.applicationDirectory.resolvePath( preferencesPath+

contents[i].name+

"/config.xml" ), FileMode.READ);

configXML = new XML(fileStream.readUTFBytes(fileStream.bytesAvailable));

xml += "<menu label=\""+configXML.MenuLabel[0]+"\" action=\""+

configXML.url[0]+"\" />";

}

}

xml += "</menus>";

 

return new XMLList(xml);

}

Con esto lee la información que esta en un config.xml y agrega los campos al menu principal (que es un Tree):

<config>

<url>modules/preferences/Player/Player.swf</url>

<MenuLabel>Player Preferences</MenuLabel>

</config>

Todo el código estará disponible en pocos días 😀

21Apr/089

Modularización con Adoble Flex

Una característica importante que tiene Flex es a la hora de crear módulos, este provee un componente el cual sirve para cargarlos (estos son SWF, el “ejecutable” que compila Flex), el Cargador de Módulos se crea de la siguiente forma:

<mx:ModuleLoader id="CargadorModulos" url="ejemplo_modulo.swf" width="100%" height="100%" />

Este se comporta como cualquier otro componente y tiene las típicas propiedades como width y height, donde podemos definir el tamaño de este, como también incluye la propiedad url, que será el modulo a cargar, en este ejemplo se cargará el modulo “ejemplo_modulo.swf”. Si queremos accesar desde el modulo a propiedades u objetos de la aplicación principal debemos importar lo siguiente (dentro de nuestro modulo):

<mx:Script>

<![CDATA[

import mx.core.Application;

private function init():void {

Application.application.ObjetoDesdeAplicacion.Metodo();

}

]]>

</mx:Script>

 

Puede ser que necesitemos ejecutar una función al momento de que cargue el módulo, como ya creamos la función init() debemos agregar la propiedad “initialize” a nuestro modulo:

<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" width="100%" height="100%" initialize="init()">

Ahora supongamos que queremos cargar otro modulo desde “ejemplo_modulo.swf” para esto simplemente podemos hacer lo siguiente (suponiendo que estamos agregando esto al CDATA de Script:

<mx:Script>

<![CDATA[

private function FuncionCargaOtroModulo():void {

Application.application.CargadorModulos.url = "otro_modulo.swf";

}

]]>

</mx:Script>

 

Pueden bajar el ejemplo completo donde encontrarán como crear menús y como tratar los eventos de estos para cargar un nuevo modulo.

Ejemplo de Modularización en Flex