Comunidad de diseño web y desarrollo en internet online

Cómo cambiar el nombre de una veriable dinámicamente

Citar            
MensajeEscrito el 02 Sep 2010 10:44 pm
Buenas,

Estoy haciendo un menú dinámico y en el bucle "for" q crea los botones, hay una variable q debe cambiar de nombre a cada vuelta del bucle porq sino me da error al publicar porq ya existe una variable con el mismo nombre cuando intenta crear la siguiente.

Se os ocurre alguna forma de cambiarle el nombre a la variable dinámicamente?

Gracias.

Por deskarrada

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Sep 2010 10:51 pm
Esto es lo q se me ha ocurrido:

var menuItemImgBulkloader:BulkLoader;
menuItemImgBulkloader.name = "menuItemImgBulkloader" + i;

Pero me da el siguiente error:

1059: Property is read-only.

Entiendo q me dice q el name de la var no tiene permisos de escritura, sino solo de lectura, no?

Sabéis como solucionarlo?

Gracias

Por deskarrada

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Sep 2010 03:17 am
BulkLoader es una biblioteca para carga de multiples archivos donde estableces una cola, prioridades, etc. Si mal no recuerdo, le puedes pasar un string en el constructor para identificar distintas instancias (y ahí si concatenas el nombre + i), mirate la documentación http://code.google.com/p/bulk-loader/wiki/GettingStarted

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2010 06:04 am
BuenAS:

Una ejemplo rápido de cómo cargar imágenes cuyas rutas están en un xml utilizando BulkLoader. Personaliza el bucle for con el nombre correcto de los nodos de tu xml:

Código ActionScript :

package
{
   import br.com.stimuli.loading.BulkLoader;
   import br.com.stimuli.loading.BulkProgressEvent;
   
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.net.URLLoader;
   import flash.net.URLLoaderDataFormat;
   import flash.net.URLRequest;
   
   public class TestBulkLoader extends Sprite
   {
      public function TestBulkLoader()
      {
         super();
         
         //Creamos un URLLoader para cargar el xml
         var loader:URLLoader = new URLLoader();
         loader.load(new URLRequest("xml/imagenes.xml"));
         loader.dataFormat = URLLoaderDataFormat.TEXT;
         loader.addEventListener(Event.COMPLETE, completeXmlHandler, false, 0, true);
      }
      
      private function completeXmlHandler(event:Event):void
      {
         URLLoader(event.currentTarget).removeEventListener(Event.COMPLETE, completeXmlHandler);
         
         //Obtenemos el xml cargado con URLLoader
         var xml:XML = new XML(event.target.data);
         
         //Creamos el BulkLoader que utilizaremos para cargar las imágenes
         //y procesamos el xml cargado para añadir las imágenes a cargar
         var loader:BulkLoader = new BulkLoader("miBulkLoader");
         var childs:int = xml.imagenes.length();
         for (var i:int = 0; i < childs; ++i) {
            loader.add(xml.imagenes[i].url.toString(), {id:"imagen_" + i.toString()});
         };
         
         loader.addEventListener(BulkProgressEvent.PROGRESS, onProgressHandler, false, 0, true);
         loader.addEventListener(BulkProgressEvent.COMPLETE, onCompleteHandler, false, 0, true);
         loader.start();
      }
      
      private function onProgressHandler(event:BulkProgressEvent):void
      {
         
      }
      
      private function onCompleteHandler(event:BulkProgressEvent):void
      {
         var loader:BulkLoader = BulkLoader.getLoader("miBulkLoader");
         loader.removeEventListener(BulkProgressEvent.PROGRESS, onProgressHandler);
         loader.removeEventListener(BulkProgressEvent.COMPLETE, onCompleteHandler);         
         //Aquí están las imágenes ya cargadas
      }
   }
}


Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 03 Sep 2010 11:24 am
A ver, basándome en lo q me dices, he intentado resolverlo haciendo algunas modificaciones para conseguir lo q necesito, pero me encuentro con dos baches.

Este es mi código:

Código :

function menuItemBuilder():void{
         //menuItemImgBulkloader.name = "menuItemImgBulkloader" + i;
         var menuItemImgBulkloader:BulkLoader = new BulkLoader("menuItemImg_bulkloder");
      
         for(var i:Number = 0; i< xmlConfigAccess.sections.section.length(); i++){         
            //ADD MENU ITEM CONTAINER
            //var i:Number = 0;
            var menuItem_mc:MovieClip = new MovieClip();
            menu_mc.addChild(menuItem_mc);
            if(i == 0){
               menuItem_mc.y = 0; 
               menuItem_mc.x = 0;
            }else{
               menuItemXPos = menuItemXPos + lastMenuItemWidth + xDistanceBetweenMenuItems;
               menuItem_mc.y = 0; 
               menuItem_mc.x = menuItemXPos;         
            }
            
            //ADD AN INNER SHADOW TO THE MENU ITEM
            var menuItemShadow:DropShadowFilter = new DropShadowFilter();  
            menuItemShadow.color = 0x000000;  
            menuItemShadow.blurY = 8;  
            menuItemShadow.blurX = 8;  
            menuItemShadow.alpha = 1;  
            menuItemShadow.distance = 0;
            menuItemShadow.inner = true;
            menuItemShadow.quality = 3;
            menuItemShadow.strength = 1.2;
            var menuItemShadowFilterArray:Array = new Array(menuItemShadow);  
            menuItem_mc.filters = menuItemShadowFilterArray;
            
            //LOAD THE MENU ITEM IMG
            //Add new bulkloader
            //var menuItemImgBulkloader:BulkLoader;
            //menuItemImgBulkloader.name = "menuItemImgBulkloader" + i;
            //menuItemImgBulkloader = new BulkLoader("menuItemImg_bulkloder");
            
            //Add imgs urls to bulkloader 
            var menuItemImgUrl:String = xmlConfigAccess.sections.section[i].menuImg;
      
            menuItemImgBulkloader.add(menuItemImgUrl);
            
            trace(menuItemImgBulkloader);
            
            //EVENTS
            menuItemImgBulkloader.addEventListener(BulkLoader.PROGRESS, menuImgBulkloaderProgress);
            menuItemImgBulkloader.addEventListener(BulkLoader.COMPLETE, menuImgBulkloaderComplete);
            
            //START BULKLOADER
            menuItemImgBulkloader.start();
         }
         
         function menuImgBulkloaderProgress(Ev:BulkProgressEvent):void{
            
         }
         function menuImgBulkloaderComplete(Ev:Event):void{
            /*var menuItemImgBulkloader:BulkLoader = BulkLoader.getLoader(menuItemImgUrl);
            menuItemImgBulkloader.removeEventListener(BulkLoader.PROGRESS, menuImgBulkloaderProgress);
            menuItemImgBulkloader.removeEventListener(BulkLoader.COMPLETE, menuImgBulkloaderComplete);*/
            
            var xmlMenuItemImgBitmap:Bitmap = menuItemImgBulkloader.getBitmap(menuItemImgUrl);
            menuItem_mc.addChild(xmlMenuItemImgBitmap);
            xmlMenuItemImgBitmap.x = 0;
            xmlMenuItemImgBitmap.y = 0;
            
            //ADD MENU ITEM TITLE TEXT FIELD
            var menuItemTitle_txt:TextField = new TextField();
            menuItemTitle_txt.defaultTextFormat = titleTextFormat;
            menuItemTitle_txt.antiAliasType = AntiAliasType.ADVANCED;
            menuItemTitle_txt.autoSize = TextFieldAutoSize.LEFT;
            menuItemTitle_txt.text = xmlConfigAccess.sections.section[i].sectionTitle;
            menuItemTitle_txt.x = 50 - (menuItemTitle_txt.width/2);
            menuItemTitle_txt.y = 50 - (menuItemTitle_txt.height/2);
            menuItemTitle_txt.embedFonts = true;
            menuItemTitle_txt.selectable = false;
            menuItemTitle_txt.textColor = 0x000000;
            menuItem_mc.addChild(menuItemTitle_txt);
         }
      }


Antes de nada comentar q he metido el START BULCKLOADER y los eventos PROGRESS y COMPLETE en el bucle for porq necesito q llamen en cada vuelta a la función menuImgBulkloaderComplete para q se añadan la imagen y el label correspondiente a cada botón, si los sacase del bucle for, solo añadirian la imagen y el label al último botón del menú.

El primer bache me sale al declarar los eventos PROGRESS y COMPLETE. Me da el típico error de:

TypeError: Error #1010: Un término no está definido y no tiene propiedades.
at MethodInfo-410()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at br.com.stimuli.loading::BulkLoader/_onAllLoaded()
at br.com.stimuli.loading::BulkLoader/_onItemComplete()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at br.com.stimuli.loading.loadingtypes::LoadingItem/onCompleteHandler()
at br.com.stimuli.loading.loadingtypes::ImageItem/onCompleteHandler()

Si comento dichos eventos para q no se ejecuten y tras el START BULKLOADER llamo a la función menuImgBulkloaderComplete, me encuentro con un segundo bache al declarar la variable var xmlMenuItemImgBitmap, la cual me da el siguiente error:

Error #2007: El valor del parámetro child debe ser distinto de null.
at flash.display::DisplayObjectContainer/addChild()
at MethodInfo-410()
at MethodInfo-411()
at MethodInfo-412()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at br.com.stimuli.loading::BulkLoader/_onAllLoaded()
at br.com.stimuli.loading::BulkLoader/_onItemComplete()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at br.com.stimuli.loading.loadingtypes::LoadingItem/onCompleteHandler()

Por deskarrada

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Sep 2010 12:37 pm
BuenAS:

La filosofía, y el modo de uso de BulkLoader, de bastante distinta al enfoque que le has dado. BulkLoader sirve para cargar un volumen dado de assets -en este caso, imagenes-, y cuando se hayan cargado, mostrarlas de la manera que estimes oportuno. Es el uso habitual que se da en multitud de microsites Flash, que al entrar vas viendo varios mensajes: "Cargando audio %", "Cargando imágenes %""... No tiene mucho sentido crear un proceso de carga con BulkLoader para obtener sólo una imagen. Quizá te entendí mal al comienzo de esto, cuando hablabas de cargar (y procesar) multiples xml's.

Si el uso que le vas a dar es el mostrado en el anterior post sería más adecuado usar la clase Loader, que sólo carga una imagen, y el proceso sería el siguiente:

1. Te creas el Loader donde creas el botón y se lo añades.
2. Inicias la descarga de la imagen con:

Código ActionScript :

loader.load(new URLRequest("imagenes/imagen.jpg"));

3. Si te interesa conocer el proceso de carga, o cuándo acaba, añades un listener al loader para ambos eventos (progress y complete). Pero posiblemente no te sea necesario.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 03 Sep 2010 12:46 pm
BuenAS:

Por otro lado, si tienes tiempo y a nivel particular, podrías echarle un vistazo a LoaderMax, sin pensar en desarrollar con él la aplicación final. Todas estas cuestiones las tiene bastante bien resueltas y, por ejemplo, puedes crear una cola de descarga de imágenes, asignando a cada una el objeto en el que se mostrará cuando acabe de cargarse.

Una vez visto funcionar (el autor ya se calentó la cabeza con los problemas que ahora te surgirán), quizá te sirva de "inspiración" para crearte tus propias rutinas de carga. Cuidado, que no digo hacer Copy&Paste ¡eh! :)

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 03 Sep 2010 01:19 pm

Lukánicos escribió:

No tiene mucho sentido crear un proceso de carga con BulkLoader para obtener sólo una imagen. Quizá te entendí mal al comienzo de esto, cuando hablabas de cargar (y procesar) multiples xml's.


No, no, me entendiste perfectamente. Mi site empieza cargando varios xml por lo q el bulkloader me ha venido de perlas, pero luego, al crear el menú dinámico, quise utilizar tb bulkloader y es cuando me he dado contra un muro, pero para cargar los xml del inicio me ha resuelto la papeleta.

Lo q propones de mirarme las tripas del LoaderMax para ver ideas, puede estar bien.

De todas formas, ya q dices q el bulkloader no es lo más apropiado para el código de cargar imgs individualmente, puede q esta parte la haga con los métodos clásicos y a correr.

Mil gracias por todo, me habéis ayudado muchísimo.

Por deskarrada

18 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.