Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Como crear un arbol Flex desde un XML

25 agosto, 2014

Arbol Flex desde un XML

Flex dispone de muchos componentes predefinidos, uno de ellos es el componente Tree, con este componente y un poco de Action Script podemos mostrar los datos obtenidos de un XML en forma de árbol.

Flex nos proporciona el objeto HTTPService con el que podemos obtener los datos (XML) de una URL, una vez hemos hecho la llamada, guardamos el resultado en una variable de tipo XML y después le asignamos esta variable al árbol como su DataProvider.

CÓDIGO:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="https://www.adobe.com/2006/mxml" layout="absolute" width="272" height="484" creationComplete="loadTree();">
<!–ACTION SCRIPT–>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import flash.external.*;
import mx.rpc.events.*;
 
//En esta variable se recoge el valor del XML recibido por httpsService
var arbol:XML;
 
//Se ejecuta cada vez que se pincha en el " arbol Flex desde un XML "
//Del item selecionado (nodo XML) se obtiene su parametro URL
 
//Mediante el objeto window del navegador se invoca la URL
private function clickHandler(event:MouseEvent):void{
var nodoXML:XML = arbolOrganizacion.selectedItem as XML;
var https://codifica.me/String =  nodoXML.@url;
var location:String=ExternalInterface.call(
"function (param) {" +
"window.location = param;"+
"}",url);
}
 
//Si falla la peticion del httpsService
//Aquí se captura el error
//Y se muestra por pantalla
private function httpsService_fault(evt:FaultEvent):void {
var title:String = evt.type + " (" + evt.fault.faultCode + ")";
var text:String = evt.fault.faultString;
Alert.show(text, title);
}
 
//Si la llamada por httpsService ha funcionado bien
//Se recoge el XML el la variable arbol
//Y se le asigna como dataprovider al tree
private function httpsService_result(evt:ResultEvent):void {
arbol = XML(evt.result);
arbolOrganizacion.dataProvider = arbol;
arbolOrganizacion.validateNow();
arbolOrganizacion.expandItem(arbol, true, false);
}
 
//Una vez se carga el SWF esta es la primera
//Funcion que se ejecuta se utiliza httpsService
//Para obtener el XML de una URL en concreto
private function loadTree():void {
httpsService.url = 'https://urlDelMXL/fichero.xml';
httpsService.send();
}
 
]]>
</mx:Script>
<!–FIN ACTION SCRIPT–>
<mx:httpsService id="httpsService"
resultFormat="e4x"
fault="httpsService_fault(event);"
result="httpsService_result(event)" />
 
<mx:Canvas x="0" y="0" width="272" height="484" backgroundColor="#FFFFFF">
<mx:Tree id="arbolOrganizacion" x="0" y="0"
height="484" width="272"
labelField="@nombre"
fontFamily="Arial" click="clickHandler(event);">
</mx:Tree>
</mx:Canvas>
</mx:Application>

El XML asociado sería algo así:

<categoria nombre="Categorias" url="https://www.codifica.me">
 
<categoria nombre="Cat1" url="https://www.codifica.me">
 
<categoria nombre="Cat1.1" url="https://www.codifica.me"/>
 
</categoria>
 
<categoria nombre="Cat2" url="https://www.codifica.me">
 
<categoria nombre="Cat2.1" url="https://www.codifica.me"/>
 
<categoria nombre="Cat2.2" url="https://www.codifica.me">
 
<categoria nombre="Cat2.2.1" url="https://www.codifica.me"/>
 
<categoria nombre="Cat2.2.2" url="https://www.codifica.me"/>
 
</categoria>
 
</categoria>
 
</categoria>

En la imagen podéis ver el resultado:

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Comentarios (3)

Hola
El código de me da los siguientes errores en Flex Builder 3:

1086: Error de sintaxis: se esperaba un punto y coma antes de location.
1135: Error de sintaxis: var no es un tipo válido.

Ambos errores en las líneas:
var https://www.codifica.me/String = nodoXML.@url;
var location:String=ExternalInterface.call(

Pensé que tal vez era una falta de comilla simple, así que intenté con:
var ‘https://www.codifica.me/String’ = ‘nodoXML.@url’;

Pero esto último da el siguiente error:
1084: Error de sintaxis: se esperaba identifier antes de https://www.codifica.me/String.

¿Me puedes enviar por favor los archivos fuente o tal vez orientarme respecto al problema?

Gracias!!!!!!!!!!!!

Responder

Talvez una imagen del trabajo final ayudaria para ver si es lo que queremos o no, gracias.

Responder

Ya tienes la imagen 🙂 ,
salu2

Responder