Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ohrlando

[Resolvido] Menu com submenus

Recommended Posts

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 igual

os 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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.