Resultado en un campo de texto desde una clase
Hola.
A ver si alguien me ayuda porque con AS3 a veces me atasco en tonterias.
Pretendo subir una imagen al un servidor. Para ello é usado la clase FileReference siguiendo un ejemplo sacado de internet. En este ejemplo el código estaba dentro del .fla y el resultado de las funciones ("cargando", "error...", "imagen cargada", ...) los mostraba en un campo de texto colocado en el escenario. Funciona perfectamente pero yo quiero hacer lo mismo pero colocando el código en una clase.
Mi pregunta es esta, usando esta clase (es larga):
package clases{
//Clases necesarias
import flash.events.*;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.URLRequest;
public class subirImagen {
private var uploadURL:URLRequest;
private var archivo:FileReference;
//Función llamada al pulsar examinar, se crea el filereference y se abre el navegador de archivos
public function subirImagen():void {
uploadURL = new URLRequest();
uploadURL.url = "uploadFile.php";
archivo = new FileReference();
ponerListeners(archivo);
archivo.browse(getTypes());
}
//Añado los listener al objeto filereference
private function ponerListeners(dispatcher:IEventDispatcher) {
dispatcher.addEventListener(Event.CANCEL, cancelHandler);
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(Event.SELECT, selectHandler);
dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadCompleteDataHandler);
}
//Con está función se generan los tipos de archivos que estarán disponibles para seleccionar desde el navegador
private function getTypes():Array {
var allTypes:Array = new Array(getImageTypeFilter(), getTextTypeFilter());
return allTypes;
}
//Tipos de imágenes admitidos, tanto para pc como para mac
private function getImageTypeFilter():FileFilter {
return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)","*.jpg;*.jpeg;*.gif;*.png");
}
//Tipos de archivos de texto admitidos, para pc y mac
private function getTextTypeFilter():FileFilter {
return new FileFilter("Text Files (*.txt, *.rtf)","*.txt;*.rtf");
}
//Se distribuye cuando se cancela la descarga desde el navegador de archivos.
private function cancelHandler(event:Event):void {
trace("Subida cancelada.");
}
//Se distribuye cuando se finaliza la descarga o la carga
private function completeHandler(event:Event):void {
trace("Subida completada.");
}
//Se reciben datos del servidor tras completar la carga
private function uploadCompleteDataHandler(event:Event):void {
trace("Subida confirmada por el servidor.");
}
//Se produce cuando falla la carga y hay un código http de error.
//Por ejemplo si no se encuentra el PHP, se generará un error 404.
private function httpStatusHandler(event:HTTPStatusEvent):void {
trace("Se ha producido el siguiente error: " + event.status);
}
//Se produce cuando falla la carga o descarga
private function ioErrorHandler(event:IOErrorEvent):void {
trace(event.text);
}
//Se inicia la carga o descarga
private function openHandler(event:Event):void {
trace("Comienza la subida");
}
//Se distribuye periodicamente durante la carga o la descarga, mostrando el progreso de la misma.
private function progressHandler(event:ProgressEvent):void {
var file:FileReference = FileReference(event.target);
trace(event.bytesLoaded + " bytes de " + event.bytesTotal + " bytes subidos.");
}
//Se distribuye al intentar descargar o cargar un archivo de un servidor fuera del entorno de seguridad de la película
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("El servidor no permitió la carga del archivo.");
}
//Se distribuye al elegir el archivo para carga o descarga desde el navegador de archivos.
function selectHandler(event:Event):void {
//donde.text = "";
var archivo:FileReference = FileReference(event.target);
trace("Archivo elegido: " + archivo.name + "Tamaño = " + archivo.size + " bytes.");
if (archivo.size > 2000000) {
trace("No se pueden subir archivos de más de 2000 KB.");
} else {
archivo.upload(uploadURL);
}
}
}
}
A la que llamo desde el .fla así:
import clases.subirImagen;
function buscarImagen(event:MouseEvent) {
var subir:subirImagen = new subirImagen();
}
examinar.addEventListener(MouseEvent.CLICK,buscarImagen);
La clase funciona bien pero ¿cómo hago para que lo que ahora mismo muestro en los "trace" se muestre en un campo de texto colocado en el escenario? Al referirme al campo de texto me da error siempre... he probado de varias formas y nada.
Ochionet
Independientemente de que subirImagen funcione correctamente, puedes hacerlo de varias formas, podrías crear el campo de texto en el fla o bien en la clase subirImagen. También difiere si la caja de texto las creas con código o directamente en el escritorio del fla. Si la creas en el fla, ya sea con código o directamente sobre el escritorio, tendrás que enviar desde subirImagen el valor a la propiedad .text de la caja de texto o textfield. Para evitar tener que estar pasando información de una clase a otra puedes crear el textfield directamente en subirImagen, el textfield también tendrá que estar añadido a la lista de visualización (addChild) para que se vea. Una vez que tengas creado el textfield con todas sus propiedades definidas sólo tendrás que asignar el valor del trace a cajaTexto.text = valor.
Saludos,