Comunidad de diseño web y desarrollo en internet online

Tree dinamico con String

Citar            
MensajeEscrito el 15 Jun 2009 07:50 am
Tengo un código que conseguí hacer con la ayuda de este foro en donde me carga un xml y segun cuantas estructuras xml tiene, me carga X trees dentro de un panel.

Ahora en vez de eso necesito que mi código reciba unos Strings(el string es un xml, en vez de cargar el archivo se carga un String pero es exactamente igual que un archivo xml, desde el <?xml version....> hasta el </Finxml).

Creo que hasta ahora esta todo claro, aunque luego pondré el código para que se vea mejor.

Ahora lo que pretendo es que en vez de cargar el xml al principio haga esto:

Hacer click en un botón, conseguir el string y que aparezca en el primer tree, hacer de nuevo click, conseguir un nuevo string y que salga debajo del primer tree y así sucesibamente N veces. He probado más de una forma, pero con la mitad se me bloquea el firefox y a ver si alguien me puede ayudar.

He aquí el código que me carga los trees dinamicamente desde un xml:

Código ActionScript :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="httpTree.send()">

   <mx:Script>
   <![CDATA[
   
   import mx.controls.Tree;   

    private function treeLoaded():void { 
       
       xmlTree = XML(httpTree.lastResult);  
      var lista:XMLList= xmlTree.Cuenta;

      for(var i:Number=0;i<lista.length(); i++){ 
            var tmpTree:XMLList = xmlTree.Cuenta[i].node;
            var newTree:Tree = new Tree();
             newTree.dataProvider = tmpTree;
             newTree.labelField = "@label";
             newTree.width = 250;
              treePanel.addChild(newTree);
       }
    }
   ]]>
   </mx:Script>

   <mx:XML id="xmlTree"/>

   <mx:HTTPService id="httpTree" url="Arbol2.xml" resultFormat="e4x" result="treeLoaded()"/>

   <mx:Panel id="treePanel" title="Carpetas" width="252" height="405" x="26" y="86"/>

</mx:Application>


Cargando el string lo tengo hecho pero solo con uno, metiendo el string en el dataprovider del tree, pero con este código no consigo hacer lo mismo.

Muchas gracias

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Jun 2009 07:26 pm
Nadie puede echarme una mano con el asunto?

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Jun 2009 08:10 pm
¿Cuál es la estructura de tu XML?

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 17 Jun 2009 08:23 pm
Sería algo así, aunque ya digo que en vvez de cargarlo con el httpservice lo consigo con un string

Código XML :

<?xml version="1.0" encoding="UTF-8"?>

<Cuentas>



<Cuenta id="cuenta1" label="cuenta1">

<node label="INBOX">

   <node label="Nombre">

      <node label="Apellido">

         <node label="Carpeta1">

            <node label="Carpeta11">

            </node>

            <node label="Carpeta12">

            </node>

            <node label="Carpeta13">

               <node label="Carpeta131">

               </node>

            </node>

         </node>

         <node label="Carpeta2">

            <node label="Carpeta21">

            </node>

         </node>

      </node>

   </node>

</node>

</Cuenta>



<Cuenta id="cuenta2" label="cuenta2">

<node label="INBOX">

   <node label="Nombre2">

      <node label="Apellido2">

         <node label="Carpeta1">

            <node label="Carpeta11">

            </node>

            <node label="Carpeta12">

            </node>

            <node label="Carpeta13">

               <node label="Carpeta131">

               </node>

            </node>

         </node>

         <node label="Carpeta2">

            <node label="Carpeta21">

            </node>

         </node>

      </node>

   </node>

</node>

</Cuenta>
</Cuentas>

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Jun 2009 09:01 am
No se por qué quieres cargarlo como un string, de todas formas cuando lo cargas con httpservices puedes convertirlo a un string, pero creo que no hace falta. Creo que lo que buscas es cada vez que presiones un botón que vaya accediendo poco a poco a cada uno de los nodos del XML no? Pues esto lo podrías lograr incrementando una variable cada vez que presiones el botón y llamar a una función que acceda solamente al nodo que deseas, por ejemplo la función podría ser esta (esto empezaría a funcionar después que cargue el XML es decir que lo implementas dentro de la función treeLoaded):

Código ActionScript :

function putTree(node:uint):void{

   var lista:XML = xmlTree.Cuenta[node];
   var nodes:XMLList = lista.node;
   
   var newTree:Tree = new Tree(); 
   newTree.dataProvider = nodes; 
   newTree.labelField = "@label"; 
   newTree.width = 250; 
   treePanel.addChild(newTree); 

}


De esta manera cuando se inicia la aplicación (la variable la declararías en 0) y presionas el botón mandar a llamar a la función:

Código ActionScript :

//---Declaraste la variable en 0
var inc:uint = 0;

//---Llamas a la función dentro del evento del botón
putTree(inc);
inc++;


Por lo tanto accediste al primer nodo y la variable se incrementó en uno, así que la próxima vez que lo presiones te llamará al segundo nodo del XML.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 18 Jun 2009 09:14 am
Quiero utilizar un String, porque el String me llega desde Java y no quiero crear un archivo XML y después cargarlo en flex, con el String la cosa sería directa y sin crear archivos inecesarios.

Probé con cargar un arbol y lo conseguí, pero no lo consigo hacerlo dinamicamente como dije antes. Como bien dices quiero cargar un nodo cada vez que haga click, quiero cargar distintas cuentas de correo, y al hacer click cargar cada cuenta. Es posible que un futuro se cargen todos al iniciar, pero también sería con un string.

Ahora voy a probar tu código, cunaod lo entienda completamente, a ver si lo consigo.

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Jun 2009 09:56 am
Con el ejemplo que has puesto tu siempre se carga el primer nodo no? ya que si tengo que llamar a esa función cada vez que presiono y se inicializa a 0, siempre cargará el nodo número 1, no?

gracias

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Jun 2009 11:28 am
Mira si recibes un string lo puedes convertir a XML de la siguiente manera:

Código ActionScript :

var xmlTree:XML = new XML(string_recibido);


Lo segundo que preguntas, no siempre va a cargar el nodo 1, porque es verdad que inicializas la variable en 0, pero en cuanto presiones el botón llamas a la función e incrementas esa variable en 1 (inc++), por lo que la segunda vez que llames llamará al nodo 2 y la tercera al nodo 3 y así consecutivamente.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 18 Jun 2009 03:02 pm
No me queda muy claro como quedaría el código al final. La cosa es que cuando tenía el httpservice me cargaba un tree cada vez que clickaba en el boton (no consegui que cargara tress diferentes siempre el mismo, pero bueno eso es un mal menor, cuestion de la gestion del contador). Pero cuando quieto el httpservice y trabajo desde el string no me funciona nada. La cosa es un poco rara, ya que mi string es algo así (mystring=string+funcionjava()+string) y llamo a la función java despues de iniciar con cada click, por lo que no me queda muy claro como quedaría el codigo.

Con lo que me has explicado como quedaría el código conpleto de la función (cogiendo datos del string) a la que llama el boton al hacer click? Creo que tu lo tienes claro y has obviado algunas cosas al escribir el codigo, pero me podrías poner la función completa?

Gracias

Por zakabalt

48 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Jun 2009 08:17 pm
No no he obviado nada, como te dije nteriormente debes leer el string "completo" y convertirlo en XML desde el principio, antes de darle las acciones al botón, después el botón mandaría a ejecutar a la función y esta siempre trabajaría con el XML que ha sido convertido, no es una buena práctica leer un dato externo cada vez que se presione un botón.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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