heberto escribió:
Para accesar al contenido de cada nodo necesitas internarte en el data provider como dice LALO,estoy de acuerdo contigo de que alimentas el arbol con el XML pero si te fijas bien la instruccion para asignarlo es miArbol.dataProvider = objetoXML;
...
Bueno debo agradecerte por que la verdad es que me resulto en base al codigo que me diste y tus indicaciones. La cosa es que primero tenia un código HORRIBLE!!! jaja me dio hasta verguenza despues cuando logré simplificarlo.
Bueno aquí está por si a alguien le sirve después.
Código :
on (load) {
// Esta es la funcion que es llamada desde un botón
// prop : el nombre de la propiedad en que se debe buscar
// valor : el valor que se está buscando
this.selectNodeBy = function(prop:String, valor:String) {
// Se llama a searchNodeBy() con la raiz del arbol para buscar en forma
// recursiva dentro del contenido. Busca en varios niveles ;) .
var res:XMLNode = this.searchNodeBy_(prop, valor, this.dataProvider);
if (!res) {
trace("No se encontró el elemento");
// si no se encontro la informacion
return;
}
//una vez abiertas las ramas por searchNodeBy_() seleccionamos el nodo encontrado
this.selectedNode = res;
};
// Esta funcion busca un nodo desde la raiz un nodo específico.
this.searchNodeBy_ = function(prop:String, valor:String, nodo:XMLNode):XMLNode {
// Obtienes cuantos nodos hijos tiene
var numElementos:Number = nodo.childNodes.length;
// Haces un ciclo para accesar a cada uno de ellos
for (var i = 0; i<numElementos; i++) {
var tmp:XMLNode = nodo.getTreeNodeAt(i);
// Preguntamos si es una rama o una hoja
if (tmp.childNodes.length == 0) {
//Si es hoja comparamos la propiedad con el valor dado
if (tmp.attributes[prop] == valor) {
// Retornamos el nodo si coindice se abre la rama padre
this.setIsOpen(tmp.parentNode,true)
// Retornamos el nodo
return tmp;
}
// Si no coincide se siguen revisando los demas nodos
} else {
// Si es una rama se pregunta busca dentro de ella, pasando como raiz
// la misma rama
var res:XMLNode= this.searchNodeBy_(prop, valor, tmp);
if (res != undefined) {
// Abrimos la rama padre de esta búsqueda y retornamos el nodo
this.setIsOpen(nodo,true);
return res;
}
}
// Se revisa el siguiente nodo
}
// Si llegó hasta aqui es porque no ha encontrado el elemento
return undefined;
};
}
Ahora como verás la funcion esta puesta en un onLoad de un Componente Tree.
Mi duda es. ¿Cómo hago ahora para que todos mis componentes que tengo PUESTOS en la película (no son dinámicos) tengan la misma función?
Con eso creo que sería muy util. Algo asi como un prorotype o algo, pero como los elementos no son dinamicos no funciona para mi.
Muchas gracias a LALO y heberto