Ohrlando 0 Denunciar post Postado Setembro 30, 2010 seguinte, ainda meu menu dinâmico, mas agora tá indo tudo bem, graças a vocês =D criei o xml, o flash lê certinho mas acho que estou pecando em alguma lógica, e não sei porque... no meu xml tem botao, que é cada botão principal... cada botão pode conter subbotoes, então tem o for do botao, e um for dentro do for pra criar cada submenu que tiver... cada submenu pode ter outro submenu, então entra mais um for aí do for já mencionado... é simples. O problema é que as coisas funcionam certinho para o primeiro botão, added como está no xml, está como deveria estar... mas os próximos botoes só add o botão principal, sem submenu e nem submenu do submenu. eu penso que é algum for que tá retornando 1 e só executando 1 vez... mas não fz muito sentido já que no primeiro botão funciona certinho, e os outros botões principais são added na tela... tive reparando que o problema me parece nesse if aqui, quanto i == 1 ou seja no segundo looping ele não cai lá, estranho, ele retorna que submenu é nulo mas não é =( esse if aqui if (xmlList[i].submenus[i] != null){ //adding subBotao ... } me parece que quando cai no segundo submenus ele retorna nullo e não cria os submenus, mas não ontendo porque sendo que está com estrutura igualos outros botoes... aqui o código completo var botoes:Array = new Array ();//array representa os botões var subMenus:Array = new Array(); var subMenus_2:Array = new Array(); //no caso 3 subMenus no 2º botão //XML var urlRequest:URLRequest = new URLRequest("menus.xml"); var urlLoader:URLLoader = new URLLoader(); var myXML:XML = new XML(); var xmlList:XMLList; myXML.ignoreWhitespace = true; var i:int; var j:int; var l:int; urlLoader.load(urlRequest); urlLoader.addEventListener(Event.COMPLETE, loadedXML); function loadedXML(e:Event):void{ trace("here"); myXML = XML (e.target.data); xmlList = myXML.children(); var posX:int = 0; var posY:int = 25; var posY_2:int; trace ("qnt btns: ",xmlList.length()); //adding botao for (i = 0; i < xmlList.length(); i++){ trace ("\nAdding botão ", (i+1), "\n."); botoes.push(new Botao()); botoes[i].txtTitle.text = xmlList[i].titulo; botoes[i].id = i; if ((xmlList[i].link != "") || (xmlList[i].link != null)){ botoes[i].link = xmlList[i].link; botoes[i].frame = xmlList[i].frame; } addChild(botoes[i]); botoes[i].x = posX; posX += 120; if (xmlList[i].submenus[i] != null){ //não imprime isso, ou seja não cai aqui if (i == 1){ trace("i == 1"); } //adding subBotao trace(xmlList[i].submenus[i].submenu.length(), "submenus's "); trace("vai add ",xmlList[i].submenus[i].submenu.length(), " subbotoes"); for (j = 0; j < xmlList[i].submenus[i].submenu.length(); j++){ subMenus.push (new SubBotao()); subMenus[j].id = j; subMenus[j].link = xmlList[i].submenus[i].submenu[j].link; subMenus[j].txtTitle.text = xmlList[i].submenus[i].submenu[j].titulo; //adding subBotao2 trace(xmlList[i].submenus[i].submenu[i].submenu_2.length(), "\tSubmenus_2's "); for (l = 0, posY_2 = 0; l < xmlList[i].submenus[i].submenu[j].submenu_2.length(); l++){ subMenus_2.push(new SubBotao2()); subMenus_2[l].id = l; subMenus_2[l].txtTitle.text = "subBotao2 " + l; subMenus_2[l].link = "link subBotao2 " + l; subMenus[j].addChild(subMenus_2[l]); subMenus_2[l].x = 120; subMenus_2[l].y = posY_2; posY_2 += 25; }//for subBotao2 botoes[i].addChild(subMenus[j]); subMenus[j].y = posY; posY +=25 subMenus[j].visible = false; }//for subbotao }//if posY = 25; }//for botao }//function meu xml <?xml version="1.0" encoding="utf-8"?> <menu> <botao> <titulo>botao 1</titulo> <link></link> <frame>_self</frame> <submenus> <submenu> <titulo>submenu1</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu> <submenu> <titulo>submenu 2</titulo> <link></link> <frame></frame> <submenu_2> <titulo>submenu_2 1</titulo> <link>teste_2</link> <frame>_self</frame> </submenu_2> <submenu_2> <titulo>submenu_2 1</titulo> <link>teste_2</link> <frame>_self</frame> </submenu_2> </submenu> <submenu> <titulo>submenu3</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu> </submenus> </botao> <botao> <titulo>botao 2</titulo> <link>test.asp</link> <frame>_self</frame> <submenus> <submenu> <titulo>submenu1</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu> </submenus> </botao> <botao> <titulo>botao 3</titulo> <link></link> <frame>_self</frame> <submenus> <submenu> <titulo>submenu1</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu> <submenu> <titulo>submenu 2</titulo> <link></link> <frame></frame> <submenu_2> <titulo>submenu_2 1</titulo> <link>teste_2</link> <frame>_self</frame> </submenu_2> <submenu_2> <titulo>submenu_2 1</titulo> <link>teste_2</link> <frame>_self</frame> </submenu_2> </submenu> <submenu> <titulo>submenu3</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu> </submenus> </botao> </menu> reparem que o primeiro botao igual ao 3 então... deveriam ser iguais =P ps: o botao adiciona, mas não adiciona os submenus, e... com isso não adiciona o submenu... Compartilhar este post Link para o post Compartilhar em outros sites
Ohrlando 0 Denunciar post Postado Outubro 1, 2010 gente finalmente deu certo, consegui, vou postar como faz, é simplezinho e funfa perfeitamente, sem segredos, se alguém precisar ta aí o xml é auto-explicativo. stage: var botoes:Array = new Array ();//array representa os botões var subMenus:Array = new Array(); var subMenus_2:Array = new Array(); //no caso 3 subMenus no 2º botão //XML var urlRequest:URLRequest = new URLRequest("menus.xml"); var urlLoader:URLLoader = new URLLoader(); var myXML:XML = new XML(); var xmlList:XMLList; myXML.ignoreWhitespace = true; urlLoader.load(urlRequest); urlLoader.addEventListener(Event.COMPLETE, loadedXML); function loadedXML(e:Event):void{ myXML = XML (e.target.data); xmlList = myXML.children(); var posX:int; var posY:int; var posY_2:int; var j:int; var auxJ:int; var l:int; var auxL:int; //adding botao posX = 0; for (var i:int = 0; i < xmlList.length(); i++){ botoes.push(new Botao()); botoes[i].id = i; botoes[i].txtTitle.text = xmlList[i].titulo; addChild(botoes[i]); botoes[i].x = posX; posX += 120; if (xmlList[i].submenu.length() != 0){ trace (i, "tem subMenu"); //adding subBotao posY = 25; for (j = 0; j < xmlList[i].submenu.length(); j++){ subMenus.push (new SubBotao()); subMenus[auxJ].id = j; subMenus[auxJ].txtTitle.text = xmlList[i].submenu[j].titulo; botoes[i].addChild(subMenus[auxJ]); subMenus[auxJ].y = posY; posY +=25; subMenus[auxJ].visible = false; //adding subBotao2 posY_2 = 0; if (xmlList[i].submenu.submenu_2.length() != 0){ for (l = 0, posY_2 = 0; l < xmlList[i].submenu[j].submenu_2.length(); l++){ subMenus_2.push(new SubBotao2()); subMenus[auxJ].addChild(subMenus_2[auxL]); subMenus_2[auxL].x = 120; subMenus_2[auxL].y = posY_2; posY_2 += 25; subMenus_2[auxL].txtTitle.text = xmlList[i].submenu[j].submenu_2[l].titulo; subMenus_2[auxL].link = xmlList[i].submenu[j].submenu_2[l].link; subMenus_2[auxL].frame = xmlList[i].submenu[j].submenu_2[l].frame; auxL++; }//for subBotao2 } else { trace("não tem submenu_2"); subMenus[auxJ].link = xmlList[i].submenu[j].link; subMenus[auxJ].frame = xmlList[i].submenu[j].frame; } auxJ++; }//for subbotao } else { trace (i, "não tem subMenu"); botoes[i].link = xmlList[i].link; botoes[i].frame = xmlList[i].frame; }//if }//for botao }//function xml (aí so acrescentar ou tirar do xml): <?xml version="1.0" encoding="utf-8"?> <menu> <botao> <titulo>botao 1</titulo> <link></link> <frame></frame> <submenu> <titulo>submenu 1</titulo> <link></link> <frame></frame> <submenu_2> <titulo>submenu_2 1</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu_2> </submenu> <submenu> <titulo>submenu 2</titulo> <link>teste.asp</link> <frame>_blank</frame> </submenu> <submenu> <titulo>submenu 3</titulo> <link></link> <frame></frame> <submenu_2> <titulo>submenu_2 1</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu_2> </submenu> </botao> <botao> <titulo>botao 2</titulo> <link></link> <frame></frame> <submenu> <titulo>submenu 1</titulo> <link></link> <frame></frame> <submenu_2> <titulo>submenu_2 1</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu_2> <submenu_2> <titulo>submenu_2 2</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu_2> <submenu_2> <titulo>submenu_2 3</titulo> <link>teste_submenu.asp</link> <frame>_self</frame> </submenu_2> </submenu> </botao> <botao> <titulo>botao 3</titulo> <link>teste.asp</link> <frame>_self</frame> </botao> <botao> <titulo>botao 4</titulo> <link></link> <frame></frame> <submenu> <titulo>submenu 1</titulo> <link>teste.asp</link> <frame>_self</frame> </submenu> </botao> </menu> e o evento dos botoes, todos são os mesmos código, var precisar criar 3 (Botao, SubBotao, SubBotao_2) o código subbotao e o subbotao 2 são idênticos; Todos os botões tem um DinamycText chamado 'txtTitle' Botao: txtTitle.mouseEnabled = false;//título var id:int; //código do botão var texto:String; //título var subMenu:Boolean;//tem submenu? var link:String; //link do botão var frame:String; //frame do link (blank, self...) //subMenu var subMenus:Array = new Array([0],[1],[2],[3],[4],[5],[6],[7],[8],[9]); //array que representa os possíveis subMenus this.buttonMode = true; button.addEventListener(MouseEvent.CLICK, gotoLink); function gotoLink(e:MouseEvent):void{ if (link != null){ //navigateToURL(new URLRequest(link), frame); trace(id, texto, "\n", subMenu, "\n", link); } else{ trace("não tem"); } } button.addEventListener(MouseEvent.MOUSE_OVER, overHandler); function overHandler(e:MouseEvent):void{ button.gotoAndStop(2); } button.addEventListener(MouseEvent.MOUSE_OUT, outHandler); function outHandler(e:MouseEvent):void{ button.gotoAndStop(1); } SubBotao e SubBotao_2 var id:int; var link:String; var frame:String; txtTitle.mouseEnabled = false; this.visible = false; this.buttonMode = true; this.addEventListener(MouseEvent.CLICK, clickHandler); function clickHandler(e:MouseEvent):void{ if (link != null){ //navigateToURL(new URLRequest(link), frame); trace(link); } } MovieClip(this.parent).addEventListener(MouseEvent.ROLL_OVER, onParentOver); function onParentOver (e:MouseEvent):void{ this.visible = true; } MovieClip(this.parent).addEventListener(MouseEvent.ROLL_OUT, onParentOut); function onParentOut (e:MouseEvent):void{ this.visible = false; } perfeito, assim vai funcionar certinho valeu aê galera! abração! Compartilhar este post Link para o post Compartilhar em outros sites