Comunidad de diseño web y desarrollo en internet online

AYUDA ComboBox Dinamicos?????

Citar            
MensajeEscrito el 20 Mar 2009 02:38 pm
Hola tengo un a duda con una aplicacion. les explico

tengo un httpservice que me devuelve xml en e4x y con esto lleno mi combobox, con el data provider pero lo que quiero hacer es usar ese mismo httpservice para llenar todos los combos de mi aplicacion cuando lo necesite, es decir en un estado por ejemplo tengo 4 combos y como los datos los traigo desde php con el httpservice quiero hacer algo para que se puedan llenar facilmente :lol:
lo que habia pensado era esto (mas bien lo que intente fue esto)

Código :

<mx:httpservice id="mixml" result="AsignaXML( event )">
 //-->creo una variable global para mandarle el nombre del combo que se llenara
public var carga2:ComboBox;
 //-->Al cambiar de estado mando traer en mi funcion con un arreglo de los combos que quiero que se llenen
currenState='Estado2';
llenaCombo([1,2,3,4,5]);
  //-->Y MI FUNCION LLENA COMBO QUEDARIA ASI
llenaCombo( orden:Array ){
   for(var x:Number=1 ; x<=orden.length ; x++)
   {
  //__REALIZO UN SWITCH A LA HORA DE LA ENTRADA DEL FOR PARA QUE ME INDIQUE QUE COMBO LLENARA
     switch(x){
     case '1':
     mixml.url='miservido.php?alias=XML1';
     //-->MODIFICO EL VALOR DE LA VARIABLE GLOBAL PARA QUE ENVIE EL HTTPSERVICE CON LOS PARAMETROS DEL CASO
     carga2=cmb_combo1; //-->CON EL NOMBRE DEL COMBO
     break;
//-->Y ASI PARA CADA CASO COMO COMBOS QUE TENGA
     }
//-->AL TERMINAR EL SWITCH LLENO LOS DEMAS PARA ENVIAR LOS DATOS CON EL HTTPSERVICE
mixml.resultformat="e4x";
mixml.method="POST";
mixml.send();
   }
}
//-->Y EN MI FUNCION QUE ASIGNA LOS DATA PROVIDERS A LOS COMBO SOLO TENGO ESTO
AsignaXML( event: ResultEvent ){
 carga2.dataprovider= event.result.opcion //-->TODOS LOS TAG DE MIS XML LOS IMPRIMO CON LA PALABRA OPCIONES PARA NO TENER QUE ESTAR CAMBIANDO ESTE PARAMETRO POR CADA XML QUE DESEE TRAER.
}

:twisted: El proble es que solo me carga la informacion del ultimo caso que tengo es decir si traigo 5 casos solo carga el combo del caso 5 y al pintar los resultados con un Alert.show despues del "mixml.send" la variable global si va cambiando, pero a la hora de pintarla dentro de la funcion que maneja el xml "AsignaXML( event )" la variable global trae el mismo dato las veces que entre.



SALUDOS ESPERO ME PUEDAN AYUDAR!!!!!

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Mar 2009 03:07 pm
No entiendo la idea: ¿hacer tantas llamadas como combos tengas? ¿O recibir un solo paquete con toda la info y luego ir rellenando cada uno?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Mar 2009 03:10 pm
hacer tantas llamadas como combos tenga, por que en cada "canvas" usare diferentes combos

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Mar 2009 03:19 pm
Dado que HTTPService es asíncrono, lo que intentas es riesgoso porque dispara los 5 pedidos a la vez sobre el mismo responder. Igual no se si HTTPService puede manejar varios pedidos simultáneos sin haber completado su ciclo ... pero suponinendo que pudiera, en AsignaXML debes poder determinar mirando el paquete que te llega, a que combo le asignas la data, en lo que posteaste siempre asignas al mismo dataProvider.
Yo usaría un contador y haría los llamados en el onResult (AsignaXML )

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Mar 2009 04:49 pm
Como funciona el onResult?.

Lo que pasa es que lo se intentaba hacer era mandar en el arreglo los combos que se llenaran y despues filtrarlos con un switch para que al break de cada uno de los casos se enviara la informacion entonces segun yo se enviarian 5 HTTPService en distintos tiempos uno por uno.....si me explique?? o como me recomendas que maneje esto

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Mar 2009 05:25 pm
Yo usaría un contador y haría los llamados en el onResult (AsignaXML )


Es decir, usando un array de combos y un contador, en AsignaXML relleno el primero, incremento el contador, llamo al siguiente, y así hasta finalizar

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Mar 2009 06:04 pm
Gracias por tus prontas respuestas....

Pero sigo un poco confundio si entiendo los poner los combos en los arreglos y el contador pero como asigno el valor del xml que me regrese el httpservice?

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Mar 2009 07:32 pm
var cont:Number = 0
var combos:Array = [combo1, combo2, .......]

Suponiendo que de arranque hagas la primera llamada, la función sería algo así

Código ActionScript :

AsignaXML( event: ResultEvent ){
 ComboBox(combos[cont++]).dataprovider= event.result.opcion 
 if(cont<combos.length){
   mixml.url='miservido.php?alias=XML'+cont
   mixml.send()
  }
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Mar 2009 11:24 pm
Otra mas jajajajaja
oie pero esa fucion no la puedo mandar llamar pues como parametro recibe un event: ResulEvent y la primera vez que entre al ciclo no llevara nada de esto o me equivoco?

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Mar 2009 11:36 pm
Me te explico con el codigo lo que intente hacer,
como ves en el codigo llamo la funcion de LLenaCombo 3 veces (lo puedo mandar con un array es lo mismo) pero la cuestion en que el valor de carga2 que es el nombre del combo a llenar no lo actualiza sino que simpre me pinta el ultimo que yo pongo en la funcion por ejemplo aqui las 3 veces que entre llena el combo cmb_grupos y si solo lo mando a llamr una vez pues como solo es uno trae el correcto no entido que pasa!??? :twisted: :twisted:

Código :

<mx:HTTPService id="httpser2" result="resultadoXML( event )" showBusyCursor="true"/><!-- httpservice para informacion de los XML--> 
public var carga2:ComboBox;
//funcion para indicarle al menuBar, hacia donde se tiene que dirigir...
    public function SelMenu(event:MenuEvent):void{
       
       switch(event.label){
       case 'Envio':
       currentState='resumenes';
       tab_resumen.selectedIndex=0;
       llenaCombo('1'); //llenamos el primer combobox 1
       llenaCombo('2');
                llenaCombo('3');
}
//funcion para llenar los temas de un XML
public function llenaCombo(orden:String):void{
   
      
   switch(orden){
      
      case '1':
      httpser2.url=url2+"alias=XML_temas";
      carga2=cmb_temas;
      
      break;
      case '2':
      httpser2.url=url2+"alias=XML_tipo";
      carga2=cmb_ambito;
      break;
      case '3':
      httpser2.url=url2+"alias=XML_grupo";
      carga2=cmb_grupos;
      break;
      case '4':
      httpser2.url=url2+"alias=XML_areas";
      carga2=cmb_areas;
      break;
      case '5':
      httpser2.url=url2+"alias=XML_categoria";
      carga2=cmb_categorias;      
      break;
      case '6':
      httpser2.url=url3+"alias=XML_paises";
      carga2=cmb_paises;
      break;
      
   }

      httpser2.method="POST";
      httpser2.resultFormat="e4x"; 
      httpser2.send();   
           
}


//Esta funcion asigna el valor al combobox
public function resultadoXML( event: ResultEvent ):void{
      carga2.dataProvider=event.result.opcion;
      
}

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Mar 2009 02:50 pm
Dado que las llamadas son simultáneas y la variable es la misma en todas las llamadas, sobreescribe siempre con el úiltimo valor ya que no da tiempo a que ni siquiera llegue el primer resultado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Mar 2009 04:53 am
inot_tony no se si esto complique o facilite mas las cosas pero podrias usar la libreria bulkloader que puedes descargar de aqui http://code.google.com/p/bulk-loader/
el proposito de bulk-loader es facilitar y organizar al cargado de recursos externos al swf

Por paranoio

75 de clabLevel



 

Mexico

firefox
Citar            
MensajeEscrito el 23 Mar 2009 02:11 am
Gracias por la libreria... pero casi casi voy empenzando con flex dejame le echo un ojo y te pregutno si tengo dudas, grcia spor el tip...

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Mar 2009 10:43 am
Esa librería si mal no recuerdo es para carga de assets externos, no de datos como es el caso que estamos discutiendo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Mar 2009 05:45 pm
Entonces Jorge creo que ya te pude dar una idea de lo que quiero hacer, como crees que lo pueda solucionar???

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Mar 2009 05:49 pm
Yo haría una sola llamada, mandaría un XML grande con un nodo para cada combo, cuando recibo toda la info lo voy asignando. Sino tienes que hacer un pool de carga, tengo ejemplos en AS2, http://www.flash-db.com/Tutorials/lclasses/, pero no los he pasado a AS3

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Mar 2009 10:34 pm
Listo ya en tu web un ejemplo parecido....

donde te arroja 10 resultados y despues va cargando las respuestas uno a uno...

pero tengo que leer mas jajajajaja....

y a que te refieres con "un nodo para cada combo no entindo"

Por inot_tony

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Mar 2009 10:47 am
En tu XML

Código :

<combo1>
  <... todos los datos del combo1 ...>
</combo1>
<combo2>
  <... todos los datos del combo2 ...>
</combo2>
etc ...


Siempre es mas fácil hacer una llamada y empaquetar toda la info de una que hacer 10 llamadas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Mar 2009 03:41 pm
Perdon por la ausencia... ok ya entendi lo de los nodos en el xml de echo este se crea dinamicamente con un php que dependiendo del alias que se vaya por get genera la lista de los xml... pero sigo sin entender la logica de la carga para cada combo..???

Por inot_tony

6 de clabLevel



 

firefox

 

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