Try applying the filter to each child collection.

 

________________________________

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of hpeter96
Sent: Friday, June 13, 2008 6:13 AM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Help with updating a Tree when its dataprovider
has changed.

 

I'm working on a tree control that has an XMLListCollection as its
dataprovider.

The dataprovider has a couple of branches and nodes that sort of look
like this :

    Company
      |
      |-- Department
            |-- Person
            |-- Person
            |-- etc..
      |
      |-- Department
            |-- Person
            |-- Person
            |-- etc..
      |
      |-- Person
      |-- Person
      |! -- etc..
      
I'd like to have each Person node appear in the Tree depending on a
'visibility' flag. So if it is set, then the Person node would appear
and if its not set, then the Person node won't appear.

What I have right now is each Person node has an attribute called
'visibility' and when it is set to 'ModuleConstants.VISIBILITY_NONE',
the tree's dataDescriptor removes them from the list with this override
:

//
------------------------------------------------------------------------
-
    override public function getChildren(node:Object, model:Object =
null):ICollectionView
    {
        var childrenCollection:ICollectionView;
        var myCursor:IViewCursor;// = childrenCollection.createCursor();

        childrenCo! llection = super.getChildren(node, model);

        if(childrenCollection != null)
        {
            myCursor = childrenCollection.createCursor();

            while(!myCursor.afterLast)
            {
                // check to see if we want to show this node or not
                if(Number(myCursor.current.attribute("visibility")) ==
ModuleConstants.VISIBILITY_NONE)
                {
                    myCursor.remove();
    &nb! sp;           }
                else
                {
                    myCursor.moveNext();
                }
            }
        }

        return childrenCollection;
    }    // END OF getChildren()

//
------------------------------------------------------------------------
-

When I want to show or remove a Person node during runtime, I have a
function that :
- goes to the specific Department branch and remove all the people nodes
underneath it.
- ! adds all of the Person nodes again, but sets the visibility fl! ag
for t he Person nodes I want to appear.
- calls the tree's invalidateList() and validateNow() functions
respectively.

This works fine for short lists, but once the Tree gets long enough that
a vertical is needed, the tree control starts messing up the data and
doesn't show all of the nodes. Department branches start disappearing
and duplicates start appearing and disappearing - all a huge mess.
I did a trace on the dataProvider (the XMLListCollection) and that is
showing me the correct data - so it seems like the tree is the one
having trouble keeping up with all these changes.

Originally I wanted to filter out the Person nodes with the
XMLListCollection's filterFunction, but the filterFilter seems to only
work on objects at the top level of the hierarchy, which seems to be a
huge limitation.

Can anyone help me out ? 

 

Reply via email to