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);
}
}
}
}
}; 