Resulta que estoy haciendo un pequeño programita en Flex. Tengo un SWFLoader en el que he cargado un SWF que contiene dos botones y un campo de texto. Lo que hacen los botones es interactuar con Flex para que mediante una serie de funciones y demas se pueda: con uno guardar lo que hay en el campo de texto en un archivo, abriendose un cuadro de dialogo para elegir lugar donde guardarlo y nombre. Y con el otro boton lo que quiero es cargar el .txt que quiera en el campo de texto, es decir, que una vez pinchamos se abra el cuadro de dialogo, se elija el archivo que se quiere cargar y se acepte.
Me funciona el primero (el de salvar) a la perfeccion, pero con el segundo tengo un pequeño problema.
Resulta que la primera vez que cargo un archivo, el contenido lo cargo en una variable de tipo string. Al flash le digo que la lea, pero creo que la lee demasiado pronto, porque no carga lo que tiene que cargar, carga lo anterior. Lo se porque si no ha cargado nada y vuelvo a darle al boton de cargar, lee la variable y pone lo que hay que poner mientras yo estoy con el cuadro de dialogo. Diciendolo de otro modo, para cargar el contenido de un archivo tengo que elegir el archivo, aceptar, volver a darle a cargar y cancelar (porque no quiero cargar otro archivo o el mismo).
Aqui os pongo el codigo que estoy usando, aunque no todo, faltan unas clases que tengo en .as
Codigo de Flex:
Código Flex :
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="253" height="302" borderColor="#B05656" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#D18282, #D18282]">
<mx:SWFLoader source="prueba2.swf" y="10" width="140" height="231" horizontalCenter="0">
<mx:Script>
<![CDATA[
import com.zigzah.utils.*;
[Bindable]
public var mensaje:String = "";
public function ponerTexto():void
{
var ba:ByteArray = new ByteArray();
ba.writeUTFBytes(mensaje);
var fsaver:FileSaver = new FileSaver (ba);
fsaver.save("newtxt.txt","savedTXT");
}
[Bindable]
public var cf:String = "kk";
public function load ():void
{
var ff:FileFilter = new FileFilter ("txt" , "*.txt");
var fldr:FileLoader = new FileLoader (ff , "loadedTXT");
fldr.getBytes();
fldr.addEventListener(LoadFileEvent.BYTES_LOADED,loadHandler);
}
private function loadHandler (event:LoadFileEvent):void
{
var ba:ByteArray = event.bytes;
cf = ba.readUTFBytes(ba.length);
}
]]>
</mx:Script>
</mx:SWFLoader>
<mx:Label id="resultado" fontWeight="bold" fontSize="12" color="#FBFCFC" width="200" verticalCenter="109" x="25.5" height="65"/>
</mx:WindowedApplication>Codigo de AS3:
Código ActionScript :
btnguardar.addEventListener(MouseEvent.CLICK, guardar);
btncargar.addEventListener(MouseEvent.CLICK, cargar);
function guardar(evento:MouseEvent):void {
root.parent.parent['parentApplication']['mensaje'] = texto.text;
root.parent.parent['parentApplication'].ponerTexto();
}
function cargar(evento:MouseEvent):void {
root.parent.parent['parentApplication'].load();
texto.text = root.parent.parent['parentApplication']['cf'];
}
stop();Bueno, pues eso, lo que me gustaria saber es una manera de pasarle el contenido sin tener que volver a apretar el boton.
A ver si alguien me puede ayudar.
Muchas gracias.
