Handle nested ArrayCollection with ObjectHierarchicalData for Advance DataGrid
package
{
import flash.events.EventDispatcher;
import mx.collections.IHierarchicalData;
[DefaultProperty("source")]
public class ObjectHierarchicalData extends EventDispatcher implements
IHierarchicalData {
private var _source:Object;
public function ObjectHierarchicalData() {}
/* in our simple system, only parents with their type set to
'parent' can have children */
public function canHaveChildren(node:Object):Boolean
{
return ( node.type == 'parent' );
}
/* for any given node, determine whether that node has any children by
looking through all the other nodes for that node's ID as a parentTask */
public function hasChildren(node:Object):Boolean
{
var obj:Object;
for each( obj in source )
{
if( obj.parentTask == node.objId )
return true;
}
return false;
}
/* for any given node, return all the nodes that are children of that
node in an array */
public function getChildren(node:Object):Object
{
var parentId:String = node.objId;
var children:Array = [];
var obj:Object;
for each( obj in source )
{
if( obj.parentTask == parentId )
children.push( obj );
}
return children;
}
public function getData(node:Object):Object
{
var obj:Object;
var prop:String;
for each( obj in source )
{
for each( prop in node )
{
if( obj[prop] == node[prop] )
return obj;
else
break;
}
}
return null;
}
/* we want to return every obj that is a root object, which
in this case is going to be all nodes that have a parent node
of '0' */
public function getRoot():Object
{
var rootsArr:Array = [];
var obj:Object;
for each( obj in source )
{
if( obj.parentTask == "0" )
{
rootsArr.push( obj );
}
}
return rootsArr;
}
public function getParent(node:Object):*
{
var obj:Object;
for each( obj in source )
{
if( obj.parentTask == node.parentTask )
return obj;
}
return null;
}
public function get source():Object
{
return _source;
}
public function set source( value:Object ):void
{
_source = value;
}
}
}
Advertisement
Categories: Uncategorized