13 de jun. de 2007

Escopo de variável no ActionScript

Fala gente!

Ontem descobri um negócio interessante.

Estava eu com minha tarefa de construir um menu multinível cujo conteúdo é fornecido por um XML. Teria um array com os movieclips de todos os itens do menu (variável menu) e teria de chamar uma função passando o índice para minha função ou para abrir o submenu ou para carregar um .swf externo expresso a seguir.

ActionScript
for(i=0; i<menu.length; i++){
    menu[i].onRelease = function(){
        showMenu(i)
    }
}

Só que essa forma de codificação não fez nada que eu queria. Todos os botões chamavam o mesmo índice, o último.
não queria utilizar uma função recursiva, porque em ActionScript a recursividade tem um limite de 255 níveis (só posso chamá-la dentro dela mesma 255 vezes). Após horas quebrando a cabeça, achei uma solução, que por sinal é muito simples. Apenas redeclare a variável a ser utilizada como índice, de acordo com o código abaixo.
ActionScript
for(i=0; i<menu.length; i++){
    var indice:Number = i;
    menu[indice].onRelease = function(){
        showMenu(indice)
    }
}

Fácil, não? Difícil mesmo foi chegar nesse resultado. =P

Nenhum comentário: