Comunidad de diseño web y desarrollo en internet online

Controlar botones creados dinamicamente

Citar            
MensajeEscrito el 07 Abr 2009 03:48 pm
Saludos,
El tema es el siguiente:
He creado una serie de botones dinamicamente, dependientes de una consulta a la BD; hasta aqui todo va bien este es el codigo:

Código :

        private function setCountFaults(event:ResultEvent):void 
        {
         arCountFaults = new ArrayCollection;
         var count:int = new int(1);
         var limit:int = new int(Math.ceil(new int(event.result.length/2 as int) as Number) as int);
         for (var i:String in event.result)
         {
            var b = new Button();
            b.label = event.result[i].cantidad;
            b.setStyle("fillAlphas", [1.0, 1.0]);
                           b.setStyle("fillColors", [event.result[i].bgcolor, event.result[i].bgcolor]);
            b.setStyle("fontSize", 9);
            b.setStyle("paddingLeft", 2);
            b.setStyle("paddingRight", 2);
            b.setStyle("borderColor", "#FFFFFF");
            b.height=18;
            b.id = "sv_"+event.result[i].id;
            b.toolTip = event.result[i].name;
            b.addEventListener(MouseEvent.CLICK, selectFaultsBySeverity);
                               //la mitad de botones va en un HBox y la otra mitad en otro
            if(count>limit)
               hbSeveritiesUp.addChild(b);
            else
               hbSeveritiesDown.addChild(b);
            count++;
            arCountFaults.addItem({ label: event.result[i].name , data: event.result[i].id, cant: event.result[i].cantidad, bgcolor: event.result[i].bgcolor});
            arCountFaults.refresh();
         }
      }

En este codigo recibo un arreglo con el resultado de la consulta a la BD y a partir de esto creo los botones y los adiciono a uno(hbSeveritiesUp) u otro (hbSeveritiesDown) HBox . Los botones quedan con id igual a el prefijo "sv_" concatenado con un id retornado de la consulta a la BD de la forma : "sv_1","sv_2", "sv_4", etc ...
Ahora bien el problema esta que desde otra funcion al ocurrir un evento click en otro boton debo cambiarles el label a los botones que he creado dinamicamente, pero no encuentro la forma de referirme a ellos ya que si los referencio como sv_1.label="Nuevo texto";
me sale error de compilacion:

Código :

1120: Access of undefined property sv_1


Agradezco cualquier idea o colaboracion que me puedad prestar

Att

Ricardo Gomez Cuervo

Por rgc

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2009 04:08 pm
En la funcion que llamas al ocurrir tu evento "CLICK" debes de tener algo asi:

Código ActionScript :

//La funcion recibe un parametro tipo "MouseEvent"
//de ese parametro cachas el target que sera el boton presionado
function Mi_funcion(e:MouseEvent):void{
//aqui te trazara un objeto de tipo boton
trace(e.target);
//para cambiarle el label seria:
e.target.label="";
//Si no te deja aplicas un poco de casting
SimpleButton[e.target].label="";
//para saber que boton es 
trace(e.target.nombre); //trazara algo como "sv_n"
}



Ojala esto te sirva....Saludos!!!!

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2009 04:13 pm
Perdon hay unas correcciones a lo que puse arriba :oops:

En la parte del casting tus botones no son SimpleButton son Button supongo es codigo hecho en flex ya que los SimpleButton de flash no tienen id asi que pondrias

Código ActionScript :

Button[e.target] 
//Y para el nombre(id)
trace(e.target.id);

//Si usas flex recuerda que los trace solo se visualizan en modo de depuracion
//Yo a veces utilizo un Alert
Alert.show(e.target.id);
//Cuando quiero trazar objetos el Alert es mas delicado pero pongo
Alert.show(""+e.target);


Saludos de nuevo :P

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2009 04:36 pm
Gracias angel roberto por tu colaboracion.

Mira depronto no me explique bien:
el boton que llama la funcion desde la que debo cambiar los label de los botones creados dinamicamente es un boton estatico, por lo cual el e.target.id sera igual a "id_de_mi_boton_estatico", pero lo que yo necesito cambiar es en los botones dinamicos, a los cuales no logro poder referirme. Te resumo:
Tengo un conjunto de botones dinamicos y un boton estatico; cuando le de click al boton estatico me debe cambiar los labels de los botones dinamicos.
Me entiendes?

Una vez mas muchas gracias por tu interes y colaboracion, cualquier idea sera bienvenida.

Att

Ricardo Gómez Cuervo

Por rgc

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2009 05:02 pm
Dejame ver si entendio si no me corriges,tienes un boton que al recibir el click le cambia el label a los botones que creaste dinamicamente???

Si es asi entonces yo guardaria una referencia a cada boton:

Código ActionScript :

//fuera de esta funcion de maner global crearia un arreglo de referencias
var referencias:Array=new Array();
private function setCountFaults(event:ResultEvent):void 
        {
         arCountFaults = new ArrayCollection;
         var count:int = new int(1);
         var limit:int = new int(Math.ceil(new int(event.result.length/2 as int) as Number) as int);
         for (var i:String in event.result)
         {
            var b = new Button();
            b.label = event.result[i].cantidad;
        //Elimine los estilos por espacio
            b.height=18;
            b.id = "sv_"+event.result[i].id;
            b.toolTip = event.result[i].name;
            b.addEventListener(MouseEvent.CLICK, selectFaultsBySeverity);
                               //la mitad de botones va en un HBox y la otra mitad en otro
         
       //Aqui los agregas a pantalla y tmb a tu arreglo
   ////////////////////////////////
        referencias.push(b);
  /////////////////////////////////
        if(count>limit)
               hbSeveritiesUp.addChild(b);
            else
               hbSeveritiesDown.addChild(b);
            count++;
            arCountFaults.addItem({ label: event.result[i].name , data: event.result[i].id, cant: event.result[i].cantidad, bgcolor: event.result[i].bgcolor});
            arCountFaults.refresh();
         }
      }


//En tu funcion click cambias los labels al arreglo
function Click(e:MouseEvent):void{
for each(var item:Button in referencias){
item.label="";
}

//Si necesitas mas control de los indices usa otra manera de recorrer el arreglo
//para mas control de cada boton usa solo la posicion en el arreglo referencias[posicion].id 
}


Espero con eso se solucione si necesitas tenerlos divididos puedes hacer dos arreglos uno para cada Hbox.

Saludos!!

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2009 09:48 pm
Saludos,

Angel roberto, eso es exactamente lo que necesito, muchas gracias por tu colaboracion ha sido de mucha utilidad, exitos!

Att

Ricardo Gómez Cuervo

Por rgc

24 de clabLevel



 

firefox

 

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