Comunidad de diseño web y desarrollo en internet online

se puede cambiar el contenido a un array???

Citar            
MensajeEscrito el 05 May 2010 10:07 pm
:shock:
bueno anteriormente preguntaba como hacer una galería con distintos xml, el problema es k cuando cargo otro xml o galería las imágenes de la anterior galería se quedan y solo se agregan las nuevas.

lo que yo quisiera es que el contenido anterior desapareciera.

este es mi código

Código ActionScript :

function onCompleteHandler(e:Event):void {
   var theXMLData:XML = new XML(e.target.data);
   totalImages=theXMLData.title.length();
   for (var i:Number = 0; i < totalImages; i++) {
      titleArray.unshift(theXMLData.title[i]);
      descriptionArray.unshift(theXMLData.description[i]);
      largeImageArray.unshift(theXMLData.largeImage[i]);
      thumbnailImageArray.unshift(theXMLData.thumbImage[i]);
   }
   loadThumbnail();
   
}

function loadThumbnail():void {
   trace(imageNum);
   var thumbLoader:Loader = new Loader();
   thumbLoader.load(new URLRequest(thumbnailImageArray[imageNum]));
   thumbLoader.x=105*imageNum;
   var thisLargeImage:String=largeImageArray[imageNum];
   var thisTitle:String=titleArray[imageNum];
   var thisDescription:String=descriptionArray[imageNum];
   thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);
   function thumbLoaded(event:Event):void {
      galeria.allThumbnails.addChild(thumbLoader);
      thumbLoader.addEventListener(MouseEvent.CLICK, loadMainImage1);
      function loadMainImage1(event:MouseEvent):void {
         galeria.largeUILoader.source=thisLargeImage;
         galeria.selectedTitle.text=thisTitle;
         galeria.selectedDesc.htmlText=thisDescription;
   }
   //add to imageNum (1);
   imageNum++;
   if (imageNum<totalImages) {
      loadThumbnail();
   }
   
}

Bueno lo que pensé es remover el contenido del array, pero en el output, creo que el error se ve claramente, pues cuando hago click en otro boton para que me lea el xml, si me le lee el xml correspondiente, pero no lo hace desde el cero.
Aqui esta el output:

file loaded

Código :

portfolio2.xml //cuando hago click en el primer botón
0
1
2
3
portfolio.xml // cuando hago click en el segundo botón para ver la otra galería.
4
5
6
7
8
9
10
11


Bueno, :cry: es lo único que me falta para terminar mi proyecto, asi ke espero con ansias su ayuda y gracias.

Por paco18ch

10 de clabLevel



Genero:Masculino  

Mexico

chrome
Citar            
MensajeEscrito el 05 May 2010 11:23 pm
Considera esto: si agregas thumbs, cuando renuevas tu galería debes quitarlos, es decir así como tienes una función loadThumbnail basado en el addChild de Loaders, deberías tener una función clearThumbnail que use removeChild para quitar todos los child de galeria.allThumbnails

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 May 2010 01:39 am
bueno gracias por tu sugerencia , solo q no sabia donde poner el removechild y como, asi k investigue un poco mas y este es el codigo que tenia que agregar:

Código :

......
   imageNum++;
   if (imageNum<totalImages) {
      loadThumbnail();

   }
   while(galeria.allThumbnails.numChildren > 0)
{
    //Remove the childs.
    galeria.allThumbnails.removeChildAt(0);
}




aun asi el problema del output persistía, y era por que tenia que declarar la variable imageNum dentro de la funcion que llamaba cada galería.

Código :

function onCompleteHandler(e:Event):void {
   var theXMLData:XML = new XML(e.target.data);
   imageNum = 0;
   totalImages=theXMLData.title.length();
   for (var i:Number = 0; i < totalImages; i++) {
      titleArray.unshift(theXMLData.title[i]);
      descriptionArray.unshift(theXMLData.description[i]);
      largeImageArray.unshift(theXMLData.largeImage[i]);
      thumbnailImageArray.unshift(theXMLData.thumbImage[i]);
   }
   loadThumbnail();
   
}


bueno ahora funciona, gracias, espero q lo haya solucionado de la forma correcta, sino ya veremos.

Por paco18ch

10 de clabLevel



Genero:Masculino  

Mexico

chrome
Citar            
MensajeEscrito el 06 May 2010 04:21 pm
Es sólo una nota ¿ok?
Cuando veo una función dentro de una función... :ownz: :ownz: :ownz:
Ya sé que funciona, pero no debería
Paco, la idea de AS3 es que estén todas las funciones ya definidas. Así
function loadThumbnail()
function thumbLoaded()
y
function loadMainImage1()
Deberían(*) no estar una definida dentro de la otra.
Claro, que si las pones separadas NO va a funcionar puesto que "thumbLoader" no tendría valor DENTRO de la función thumbLoaded() ni "thisLargeImage","thisTitle" y "thisDescription" no lo tendrán DENTRO de la función loadMainImage1()

Vamos, mi idea de las funciones separadas es tener algo como

Código ActionScript :

//DE MOMENTO NO VA A FUNCIONAR
function loadThumbnail():void { 
   trace(imageNum); 
   var thumbLoader:Loader = new Loader(); 
   thumbLoader.load(new URLRequest(thumbnailImageArray[imageNum])); 
   thumbLoader.x=105*imageNum; 
   var thisLargeImage:String=largeImageArray[imageNum]; 
   var thisTitle:String=titleArray[imageNum]; 
   var thisDescription:String=descriptionArray[imageNum]; 
   thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded); 
   //add to imageNum (1); 
   imageNum++; 
   if (imageNum<totalImages) { 
      loadThumbnail(); 
   } 
}
function thumbLoaded(event:Event):void { 
      galeria.allThumbnails.addChild(thumbLoader); //<---thumbLoader NO tiene valor
      thumbLoader.addEventListener(MouseEvent.CLICK, loadMainImage1); 
}
function loadMainImage1(event:MouseEvent):void { 
     galeria.largeUILoader.source=thisLargeImage; //<---thisLargeImage NO tiene valor
     galeria.selectedTitle.text=thisTitle; //<----thisTitle NO tiene valor
     galeria.selectedDesc.htmlText=thisDescription; //<--thisDescription NO tiene valor
} 

Vamos a solucionar la función thumbLoaded
Como el evento Event.COMPLETE se lo añadimos a thumbLoader.contentLoaderInfo, podemos escribir

Código ActionScript :

function thumbLoaded(event:Event):void { 
      var loader:Loader =event.target.loader as Loader  //<--recojo el valor de "event.target.loader"
      galeria.allThumbnails.addChild(loader); //<---uso dicha variable
      loader.addEventListener(MouseEvent.CLICK, loadMainImage1); 
}

Vale, SIEMPRE la "propiedad" currentTarget del evento es a quién añadimos el evento. Hay veces que se usa target que es quien recibe el evento. En el caso de un contentLoaderInfo coinciden ambos valores
La "propiedad" target o currentTarget es de tipo Objeto. Así que, en general es buena idea crear una nueva variable e igualarla a event.target haciendo una "conversión de cast" (de otro modo no podríamos añadirle un lístener, por ejemplo). Es ese "as Loader"

Para hacer funcionar la función loadMainImage1 lo tenemos "un poco más complicado". No tenemos el valor de las variables "thisLargeImage","thisTitle" y "thisDescription", Sólo tenemos el valor de event (y, a través de él el valor de thumbLoader) Así que, de alguna manera se la tenemos que indicar.
Vemos que están definidas en la función loadThumbnail() como

Código ActionScript :

var thisLargeImage:String=largeImageArray[imageNum]; 
var thisTitle:String=titleArray[imageNum]; 
var thisDescription:String=descriptionArray[imageNum]; 

Ah! eso está mucho mejor. Ya que los Arrays están definidos a "nivel global", sólo precisaríamos conocer el valor de "imageNum".
Vale, cuando sólo precisamos un valor y tenemos un DisplayObject, es cómodo usar la "porpiedad" "name" de dicho displayObject. Así, si se llamasen "loader1","loader2"... podría hacer algo como

Código ActionScript :

function loadMainImage1(event:MouseEvent):void { 
     var loader:Loader =event.target as Loader  //<--recojo el valor de "event.target
     var index:int=Number(loader.name.substr(6));
     var thisLargeImage:String=largeImageArray[index]; 
     var thisTitle:String=titleArray[index]; 
     var thisDescription:String=descriptionArray[index]; 
     galeria.largeUILoader.source=thisLargeImage;
     galeria.selectedTitle.text=thisTitle; 
     galeria.selectedDesc.htmlText=thisDescription;
} 

Claro, que le tendríamos que dar valor a la propiedad "name" del loader. Eso lo haríamos en la función loadThumbnail()

Código ActionScript :

function loadThumbnail():void { 
   var thumbLoader:Loader = new Loader(); 
    //...AQUÍ.....
   thumbLoader.name="loader"+imageNum
    ...resto de código...
}

puff, Resumo las tres funciones para que lo veamos en conjunto

Código ActionScript :

function loadThumbnail():void { 
   trace(imageNum); 
   var thumbLoader:Loader = new Loader(); 
   thumbLoader.name="loader"+imageNum  //<---le doy NOMBRE
   thumbLoader.load(new URLRequest(thumbnailImageArray[imageNum])); 
   thumbLoader.x=105*imageNum; 
   thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded); 
   //add to imageNum (1); 
   imageNum++; 
   if (imageNum<totalImages) { 
      loadThumbnail(); 
   } 
}

function thumbLoaded(event:Event):void { 
      var loader:Loader =event.target.loader as Loader  //<--recojo el valor de "event.target.loader"
      galeria.allThumbnails.addChild(loader); //<---uso dicha variable
      loader.addEventListener(MouseEvent.CLICK, loadMainImage1); 
}
function loadMainImage1(event:MouseEvent):void { 
     var loader:Loader =event.target as Loader  //<--recojo el valor de "event.target
     var index:int=Number(loader.name.substr(6));
     var thisLargeImage:String=largeImageArray[index]; 
     var thisTitle:String=titleArray[index]; 
     var thisDescription:String=descriptionArray[index]; 
     galeria.largeUILoader.source=thisLargeImage;
     galeria.selectedTitle.text=thisTitle; 
     galeria.selectedDesc.htmlText=thisDescription;
} 


¿no queda un poco más claro?

(*)Siempre me ha jodido un poco lo de "debería"

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 May 2010 07:54 pm
:D :D :D :D :D :D :D
pues primero gracias por tu tiempo y la detallada explicación que me has dado, no solo hiciste mas sencillo el código realmente me ayudaste. Como mencionaba la galería no me borraba los anteriores thumbnail y ya se por que, tenia mal ubicada esta parte de código.

Código :

   while(galeria.allThumbnails.numChildren > 0)
{
    //Remove the first child until there are none.
    galeria.allThumbnails.removeChildAt(0);
}


finalmente todo mi código con la ayuda de ustedes me quedo así:

Código ActionScript :

function onCompleteHandler(e:Event):void {
   imageNum = 0;
   thumbnailImageArray = [];
   var theXMLData:XML = new XML(e.target.data);
   totalImages=theXMLData.title.length();
   for (var i:Number = 0; i < totalImages; i++) {
      titleArray.push(theXMLData.title[i]);
      descriptionArray.push(theXMLData.description[i]);
      largeImageArray.push(theXMLData.largeImage[i]);
      thumbnailImageArray.push(theXMLData.thumbImage[i]);
   }
   loadThumbnail();
   while(galeria.allThumbnails.numChildren > 0)
{
    //Remove the first child until there are none.
    galeria.allThumbnails.removeChildAt(0);
}
   
}

function loadThumbnail():void {
   galeria.allThumbnails.buttonMode=true;
   galeria.visible = true;
   cuadro.menu1.visible = false;
   trace(imageNum);  
   var thumbLoader:Loader = new Loader();  
   thumbLoader.name="loader"+imageNum  //<---le doy NOMBRE 
   thumbLoader.load(new URLRequest(thumbnailImageArray[imageNum]));  
   thumbLoader.x=105*imageNum;  
   thumbLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);  
   //add to imageNum (1);  
   imageNum++;  
   if (imageNum<totalImages) {  
      loadThumbnail();  
   }
}

function removeThumbnail():void {
   galeria.allThumbnails.removeChildAt(0);
   thumbnailImageArray = [];
   
   }
 
function thumbLoaded(event:Event):void {
      var loader:Loader =event.target.loader as Loader  //<--recojo el valor de "event.target.loader" 
      galeria.allThumbnails.addChild(loader); //<---uso dicha variable 
      loader.addEventListener(MouseEvent.CLICK, loadMainImage1);  
} 
function loadMainImage1(event:MouseEvent):void {  
     var loader:Loader =event.target as Loader  //<--recojo el valor de "event.target 
     var index:int=Number(loader.name.substr(6)); 
     var thisLargeImage:String=largeImageArray[index];  
     var thisTitle:String=titleArray[index];  
     var thisDescription:String=descriptionArray[index];  
     galeria.largeUILoader.source=thisLargeImage; 
     galeria.selectedTitle.text=thisTitle;  
     galeria.selectedDesc.htmlText=thisDescription; 
}  


muchas gracias, por su tiempo.

Por paco18ch

10 de clabLevel



Genero:Masculino  

Mexico

chrome
Citar            
MensajeEscrito el 06 May 2010 09:51 pm
oye bro, crees que puedes poner el ejemplo de tu codigo ya corriendo? se me hizo muy interesante :D

para que lo usas?

espero poder ver como funciona :wink:

saludos

Por iekzaer

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 May 2010 02:33 am
El código al que llegaste denota tu esfuerzo, pero dado que el amigo Eliseo dedicó tanto POST a explicar, vamos a decir que el tuyo se puede mejorar. Dos puntas (entre otras)

- Declaras removeThumbnail() y no lo usas, quizás en vez de un while ... removeChildAt que tienes en onCompleteHandler, podrías simplemente llamar a la función, en donde si implementas el while de limpieza
- loadThumbnail es recursiva, y dado que se encarga de cargar todos los thumbs, mejor sería que la ejecutes una vez y luego agregues un callback al evento Event.COMPLETE desde donde vuelves a llamar a LoadThumb, esto evita que cargues todo de golpe y de cualquier forma, ya que todos los thimbs compiten por el mismo ancho de banda y se cargarán irregularmente en vez de ordenadamente (no se nota en local, solo cuando lo subes al servidor)

Hay alguna cosita más, pero con este par de detalles tienes para empezar

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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