Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/11/2008, 18:03
Avatar de yoseman
yoseman
 
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 11 meses
Puntos: 5
Respuesta: Generar botones desde un xml

Prueba esto:

Código PHP:
var info:XML = new XML();
info.ignoreWhite true;
info.load("../agenda.xml");
var 
agenda:Array = Array();
actual=0;

info.onLoad = function(suceso:Boolean
{
    if (
suceso
    {
        var 
agenda:Array = this.firstChild.childNodes;
        for (
i=0i<agenda.lengthi++) 
        {
            
_root.createEmptyMovieClip("contenedor",_root.getNextHighestDepth());
            
_root.contenedor.attachMovie("agenda_mc","datos"+i,_root.getNextHighestDepth());
            
_root.contenedor["datos"+i]._x 250;
            
_root.contenedor["datos"+i]._y 150+(i*130);
            
_root.contenedor["datos"+i].fecha.text agenda[i].childNodes[0].firstChild;
            
_root.contenedor["datos"+i].titulo.text agenda[i].childNodes[1].firstChild;
            
_root.contenedor["datos"+i].tumb.loadMovie(agenda[i].childNodes[4].firstChild);
        }
        
defineBotones(agenda.length);
    }
    else 
    {
        
trace("error en cargar la información");
    }
};

function 
defineBotones(valor)
{
    for(
l=1;l<valor;l++)
    {
        
creaRelease(l)
    }
}

function 
creaRelease(valor)
{
    
_root.contenedor["datos"+valor].enlace.onRelease = function() 
    {
        
actual=valor;
        
coloca();
    }
}

function 
coloca()
{
    
_root.titulo_big.text agenda[actual].childNodes[1].firstChild;
    
_root.big.loadMovie(agenda[actual].childNodes[2].firstChild);
    
_root.contenido.htmlText agenda[actual].childNodes[3].firstChild;

El problema creo que está en que al definir los botones utilizas la variable 'i' que usas en este bucle:
Código PHP:
for (i=0i<agenda.lengthi++) 
Pero ten en cuenta que el evento no coge el valor actual de 'i' a cada iteración, sino que lo asocia al valor de 'i' cuando se pinche, y la variable 'i' cuando sale del bucle es justo cuando vale agenda.length ya que esa es la condición de finalización del mismo, con lo cual te llama a un nodo que no existe.

No sé si se me escapa algo y te funcionará, pero esa debería de ser la forma correcta.

Es decir, el evento cambia el valor de una variable que llamamos 'actual' y luego la función 'coloca' utiliza esa variable que cambia onRelease para colocar los datos.

Comprendo que pueda parecer un poco absurdo pero asi es.

Si todo te funcionaba menos eso, prueba creo que te debería de funcionar.

Un saludo.
__________________
[+]
[+]

Última edición por yoseman; 30/11/2008 a las 18:14