I am in the middle of building a file explorer and I have come to a
stumbling block. I have a simple screen that has a tree on the left and a
grid on the right. My ColdFusion components return an array and I end up
with something that looks like this. So far it works great but all of my
directories are showing up as leafs.
When I was messing around with the xml side I was able to provide an
attribute called isBranch. This gave the representation that there were sub
directories to this folder. The haschildren variable is letting me know if
this directory has any child dirs. How can I represent to the user that this
is a branch. After that I a pretty sure I can work through making another
call to the server and updating my array.
**** Thanks for the help in advance!
(Array)#0
[0] (Object)#1
HASCHILDREN = "true"
LASTMODIFIED = 1222802792572
NAME = "Avaya_Support"
PATH = "C:\Avaya_Support"
[1] (Object)#2
HASCHILDREN = "true"
LASTMODIFIED = 1190926722375
NAME = "dell"
PATH = "C:\dell"
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" verticalScrollPolicy="off"
horizontalScrollPolicy="off"
creationComplete="init();">
<mx:Script>
<![CDATA[
// imports
import flash.events.Event;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.utils.ObjectUtil;
public static var ROOT:String = "C:\\";
[Bindable] private var _directories:Array = new Array();
[Bindable] private var _files:Array = new Array();
// init
private function init():void {
// grab the top level directories
FileManager.getDirectories(ROOT);
// set the status bar
setStatusText(ROOT);
}
private function listDirectories(event:ResultEvent):void {
_directories = event.result as Array;
}
private function listFiles(event:ResultEvent):void {
_files = event.result as Array;
}
private function onItemChange(event:Event):void {
var currentPath:String =
event.currentTarget.selectedItem.PATH;
FileManager.getFiles(currentPath);
setStatusText(currentPath);
}
private function setStatusText(msg:String):void {
txtStatus.text = "Current Location: " + msg;
}
]]>
</mx:Script>
<mx:RemoteObject id="FileManager" destination="ColdFusion"
source="FFManager.src.cfc.FileManager" showBusyCursor="true">
<mx:method name="getDirectories" result="listDirectories(event)"/>
<mx:method name="getFiles" result="listFiles(event)"/>
</mx:RemoteObject>
<mx:Panel width="100%" height="100%" title="Extranet File Manager">
<mx:HBox width="100%" height="20">
<mx:Spacer width="100%"/>
<mx:Label text="List"/>
<mx:Label text="Thumbnails"/>
</mx:HBox>
<mx:HDividedBox width="100%" height="100%"
horizontalScrollPolicy="off" verticalScrollPolicy="off">
<mx:Tree id="tree" width="30%" height="100%"
dataProvider="{_directories}" labelField="NAME"
showRoot="true" change="onItemChange(event)"/>
<mx:DataGrid id="filelist" width="70%" height="100%"
dataProvider="{_files}" allowMultipleSelection="true"
dragEnabled="true"/>
</mx:HDividedBox>
<mx:ControlBar>
<mx:Label id="txtStatus" text="status bar"/>
</mx:ControlBar>
</mx:Panel>
</mx:Application>