Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados,
Desculpem se já houver um post com problema semelhante a este, mas não encontrei nas pesquisas que fiz.
Tenho um sistema que utiliza 2 componentes: um combobox e um list.
o combo carrega um xml "categorias" (neste xml tem uma lista links pra carregar outros xml relativos à categoria, com seus próprios valores)
o evento change do combo chama uma função que carrega o list (o list puxa o arquivo xml pra exibir na tela)
o problema é que ao mudar o combo, o evento "change" do list é duplicado, a cada vez que eu mudo o combo, ao clicar no item do list, ele vai aumentando gradativamente o chamado ao change.
No evento change do combo, eu chamei o método "list.removeAll()" mas não adianta, este método apenas "limpa" o componente visualmente, mas parece que o list guarda uma espécie de index que vai acumulando a cada vez que ele carrega dados.
Para ficar mais fácil de entender, segue abaixo o código (obs: utilizo o AS 2)
--------------- CÓDIGO
var categoria:String = 'categorias.xml'; // URL FINAL = '_Categorias/apps/categorias.xml';
System.useCodepage = true;
Stage.showMenu = false;
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function() {
var combo_list:Object = new Object();
qtde = xml.firstChild.childNodes.length;
for (i=0; i<qtde; i++) {
cat = xml.firstChild.childNodes[i].attributes.cat;
alvo = xml.firstChild.childNodes[i].attributes.alvo;
combo.addItem({label:cat, data:alvo});
if (i == 0) {
Listar(alvo);
}
}
combo_list.change = function(evt:Object) {
lista.removeAll();
Listar(evt.target.value);
};
combo.addEventListener("change", combo_list);
};
xml.load(categoria);
function Listar(str:String) {
var sub_xml:XML = new XML();
var list_list:Object = new Object();
sub_xml.ignoreWhite = true;
sub_xml.onLoad = function(success) {
lista_num = sub_xml.firstChild.childNodes.length;
for (i=0; i<lista_num; i++) {
descricao = sub_xml.firstChild.childNodes[i].attributes.descricao;
link = sub_xml.firstChild.childNodes[i].attributes.link;
lista.addItem({label:descricao, data:link});
}
list_list.change = function(evt:Object) {
Abrir(evt.target.selectedItem.data);//value);
};
lista.addEventListener("change", list_list);
};
sub_xml.load(str);
}
function Abrir(link:String) {
/*
AQUI ACONTECE O PROBLEMA - SE CLICAR NO LIST NA PRIMEIRA VEZ QUE O PROGRAMA RODA, O GET URL É CHAMADO UMA VEZ, MAS SE EU ALTERAR O COMBO E CLICAR NOVAMENTE NA LISTA, ESSA FUNÇÃO JÁ É CHAMADA 2X E ASSIM SUCESSIVAMENTE. AS CHAMADAS VÃO AUMENTANDO À CADA ALTERAÇÃO DO COMBO
TENTEI FAZER UMA GAMBIARRA, CRIANDO UM CONTADOR QUE INCREMENTAVA A CADA "CHANGE" DO LIST E LIMITANDO-O A 1a CHAMADA, MAS NÃO DEU CERTO.
*/
trace('==================-> getURL('+link+', "_blank");');
}
Será que isso é um bug do componente list ou eu é que estou fazendo algo errado?
Se puderem me ajudar,
Obrigado a todos
Carregando comentários...