I'm trying to populate a tree from a flat (non hierachial in the
normal sense) array collection. This is made up of lots of objects in
the form of FolderVO's. Now folders have parents ('parent-id') and I
want to reflect that in the tree. So I have this function:
public function get children():ArrayCollection {
var c:ArrayCollection = new ArrayCollection(model.folders.source);
c.filterFunction = function(item:Object):Boolean {
return (item.parent_id == id);
};
c.refresh();
return c;
}
And I also want to find roots:
public static function find_roots():ArrayCollection {
var roots:ArrayCollection = new ArrayCollection(model.folders.source);
roots.filterFunction = function(item:Object):Boolean {
return (item.parent_id == 0);
};
roots.refresh();
return roots;
}
Now, both these functions work and return the right values and I can
set the tree's data provider to FolderVO.find_roots().
However, when model.folders is updated or any of the nodes in it,
children or find_roots isn't called, even though model.folders is
bindable. Is there something I'm missing? I've tried using Paul's
observer tag:
http://weblogs.macromedia.com/paulw/archives/2006/05/the_worlds_smal.cfm
And it works to a certain extent. When model.folders is completely
flushed (deleted and added) it's called (and all the folders in the
tree collapse again!). However when a single folder in model.folders
is edited/deleted, it's not.
Any ideas, keep in mind I'd rather not rebuild the tree every time
something is CRUDed? I have a feeling that root_folders and children
aren't binding to model.folders properly.