He estado tratando de desarrollar un menú dinámico que se carga con un archivo xml, este genera menus y submenus, dependiendo de los nodos en el archivo xml, más exactamente, los atachea desde la librería.
Me estaba basando en un componente que encontré por ahí, pero no he podido hacerlo que me funcione como debe.
Deseo que cada vez que se haga click, el menu se contraiga y muestre el submenú correspondiente, y si este se clickea, muestre los items.
Para los que quieran, pueden descargarse los .fla desde aquí: http://www.colpixel.com/avargas/downloads/MiEjemplo.zip (Mi Desarrollo, en vía de desarrollo guiño y el otro ejemplo http://www.colpixel.com/avargas/downloads/ElComponente.zip.
Por cierto, están en versión 8 y utilicé XPath.
Gracias de antemano.
************
Actualizado: Hice unos cambios en el código, pero ya los subí, estan el zip MiEjemplo, y aquí está el nuevo código, por si lo desean reemplazar en el fla:
Código :
//Garantiza que se vean los caracteres latinos System.useCodepage = true; //NECESARIO: Librería que extiende el objeto XML de Flash import com.xfactorstudio.xml.xpath.*; //-------- Empieza el menu //------------------------- //Variable añadida var espaciado:Number = -26; //------------------------- var menu:XML = new XML(); menu.ignoreWhite = true; menu.load("menu.xml"); menu.onLoad = function(ok) { if (ok) { //Total Nodos del XML var totalNodos:Array = XPath.selectNodes(menu, "/menuitems/*"); for (i=0; i<totalNodos.length; i++) { //Verifica si es un Menú if (totalNodos[i].nodeName == "menu") { //En la librería está el MC que quiero que attachee attachMovie("menu", "menu"+i, i); thisItem = eval("menu"+i); //thisItem._y += 30; //Le asigna el valor al campo de texto dinámico thisItem.texto.text = totalNodos[i].attributes.name; //Todavía no sé que voy a ponerlo a hacer, si cargar movies externas o links a la web thisItem.onRelease = function() { trace(thisItem.texto.text); }; //------------------------- //Para generar el espaciado entre Items (Actualizado) trace(espaciado+" soy el primero"); thisItem._y = espaciado+26; espaciado = thisItem._y; trace(espaciado+" soy el segundo"); //------------------------- //Verifico si tiene submenus y si si, los guardo en el array subMenu var subMenu:Array = totalNodos[i].childNodes; if (subMenu.length>0) { for (j=0; j<subMenu.length; j++) { if (subMenu[j].nodeName == "submenu") { //Atacheo la MC que corresponde a los submenus attachMovie("submenu", "submenu"+j, j+100); thisOtroItem = eval("submenu"+j); thisOtroItem.texto.text = subMenu[j].attributes.name; thisOtroItem.onRelease = function() { trace(thisOtroItem.texto.text); }; //------------------------- //Para generar el espaciado entre Items (Actualizado) trace(espaciado+" soy el tercero"); thisOtroItem._y = espaciado+26; trace(espaciado+" soy el cuarto"); espaciado = thisOtroItem._y; //------------------------- //Este array guarda los items que pertenecen a este submenu var subMenuItems:Array = subMenu[j].childNodes; for (k=0; k<subMenuItems.length; k++) { //De nuevo como en las anteriores attachMovie("item", "item"+k, k+200); thisOtroOtroItem = eval("item"+k); thisOtroOtroItem.texto.text = subMenuItems[k].firstChild.nodeValue; thisOtroOtroItem.onRelease = function() { trace(thisOtroOtroItem.texto.text); }; //------------------------- //Para generar el espaciado entre Items (Actualizado) trace(espaciado+" soy el quinto"); thisOtroOtroItem._y = espaciado+26; trace(espaciado+" soy el sexto"); espaciado = thisOtroOtroItem._y; //------------------------- //trace(totalNodos[i].attributes.name+" >> "+subMenu[j].attributes.name+" >> "+subMenuItems[k].firstChild.nodeValue); } } else { //trace(subMenu[j].firstChild.nodeValue); } } //thisItem._y += 26; } else { //trace(totalNodos[i].attributes.name); } } } } };