Well, that's really unfortunate, as I'm trying to deliver an application
based on Flex 2 that has this behavior.  I'm going to try hacking something
together to save/restore the tree layout after resetting the dataprovider.
If anyone else has any suggestions, I'd really appreciate them.

On Nov 28, 2007 11:38 AM, Alex Harui <[EMAIL PROTECTED]> wrote:

>    Tree doesn't really support sorting.  We hope to provide an example in
> 3.0 of how to get Tree to handle sorting
>
>  ------------------------------
> *From:* [email protected] [mailto:[EMAIL PROTECTED] *On
> Behalf Of *Pan Troglodytes
> *Sent:* Wednesday, November 28, 2007 8:27 AM
> *To:* flexcoders
> *Subject:* [flexcoders] a tree that keeps sorted
>
>  I'm trying to build a tree (Flex 2) that keeps its nodes sorted, even
> when you edit them.  I keep running into problems, though.  Here's the basic
> app, without the auto-sorting:
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx=" http://www.adobe.com/2006/mxml";
> layout="vertical" creationComplete="creationComplete()">
>   <mx:Script>
>     <![CDATA[
>       import mx.collections.SortField;
>       import mx.collections.Sort;
>       import mx.collections.ArrayCollection ;
>
>       [Bindable] private var treedata:ArrayCollection =
>         new ArrayCollection([
>           {label:"node0"},
>           {label:"node1"},
>           {label:"node2"},
>           {label:"node3"},
>           {label:"node4"}
>         ]);
>
>       private function creationComplete():void
>       {
>         var sort:Sort = new Sort;
>         sort.fields = [new SortField("label", true)];
>         treedata.sort = sort;
>       }
>     ]]>
>   </mx:Script>
>   <mx:Tree
>     id="tree"
>     dataProvider="{treedata}"
>     width="200"
>     editable="true"
>     />
> </mx:Application>
>
>
> Okay, so that lets you click on the nodes and edit them.  What should be
> done to get the nodes to re-sort after editing?  I've tried:
>
>     itemEditEnd="treedata.refresh()"
>
> Doesn't work, because when itemEditEnd has been called, the dataprovider
> hasn't actually been updated.
>
>     itemEditEnd="callLater(treedata.refresh, [])"
>
> Sorta works, until renamed "node2" to "node" and then it just disappears.
> If you rename the last node to something that would make it the first node,
> you get an error.
>
>       private function reload():void
>       {
>         treedata.refresh();
>         tree.dataProvider = treedata;
>       }
>
>     itemEditEnd="callLater(reload)"
>
> This works ok, until you have a node with children like:
>     {label:"node0", children:new ArrayCollection([{label:"child-0-1"},
> {label:"child-0-2"}])},
> And you expand it before renaming "node4" to "node".  Then you get an
> error.
>
> I've also tried this without using itemEditEnd and instead having the node
> be a custom object that throws events.  I run into the same issues.  What's
> the "right" way to do something that should be a pretty simple task?
>
> --
> Jason
>  
>



-- 
Jason

Reply via email to