Thanks Blanco, tht was awesome.
-arun --- In flexcoders@yahoogroups.com, "Guilherme Blanco" <[EMAIL PROTECTED]> wrote: > > Hi, > > > I have implemented a DynamicTree for my own usage, after spending > almost a week looking for an URL about this subject. > Until now, I haven't seen any implementation, and I plan to write a > pot in my blog about it. > > The secret is one event called itemOpening of the tree... there's no > need to hack getChildren. > > Th second point, as much important as the first one are the requests > persistence. > When you fire an event using HTTPService and you call another request > without completing the first one, you'll have troubles, for sure. > I overcome this issue by using token (httpServiceInstance.send(params) > returns an AsyncToken instance), which provided me the ability to > receive all instances. without using this (and defining my custom > params again), the request first was never completed and second never > has the correct values. > Ok, then I have the requests queue... how do I remember which node I > was looking for? I had to include another queue to control that. > Then, it started another issue... how will I know that request 1 is > for node 1 and node for node 2 (which has a faster response)? Again, > another control to that. > > The third point is to decide which item has children or not. It's > defined by a property isBranch. > > > After all issues controlled, we can come with the implementation... > > You start the tree with the rootElement. Consider passing the rootId. > You can implement it without root, but you'll have to modify my > implementation... =) > > So, your tree node will be something like this: > > <?xml ...?> > <root> > <item id="1" name="Foo" isBranch="false"/> > <item id="12" name="Bar" isBranch="true"/> > </root> > > Then you implement the node children retrieval in the event itemOpening. > In my source, I added a dummy node "Loading..." and then removed it > when it loads the things. > > Here's my full class, based on my implementation and without any line > of code removed. > I hope it helps: > > > <?xml version="1.0" encoding="utf-8"?> > <mx:Tree xmlns:mx="http://www.adobe.com/2006/mxml" showRoot="false" > labelField="@name" > dataProvider="{treeDataProvider}" itemOpening="handleItemOpening(event)"> > <mx:Script> > <![CDATA[ > > import mx.controls.Alert; > > import mx.rpc.AsyncToken; > import mx.collections.ArrayCollection; > > import mx.rpc.events.ResultEvent; > import mx.rpc.events.FaultEvent; > import mx.events.TreeEvent; > > > protected var _url:String; > > public function set url(url:String):void > { > this._url = url; > > itemService.url = url; > } > > public function get url():String > { > return this._url; > } > > > protected var _rootId:uint; > > public function get rootId():uint > { > return this._rootId; > } > > > protected var itemOpeningArray:ArrayCollection = new ArrayCollection(); > > > [Bindable] > protected var treeDataProvider:XMLList; > > > public function setTree(rootId:uintg):void > { > this._rootId = rootId; > > sendRequest(this._rootId); > } > > > protected function > handleItemOpening(event:TreeEvent):void > { > // Creating loading item > var loading:XML = <item name="Loading..." > isBranch="false"/>; > XML(event.item).setChildren(loading); > > // Storing item reference > itemOpeningArray.addItem(event.item); > > // Dispatching children event > sendRequest([EMAIL PROTECTED]); > } > > > protected function > handleItemResult(event:ResultEvent):void > { > // Formatting result list > var treeXMLList:XMLList = > event.token.result.data.item as XMLList; > > // Check if we are attaching children to root > or an item > if (itemOpeningArray.length > 0) > { > // We need to pick the right item now > for (var i:int = 0, len:uint = > itemOpeningArray.length; i < len; i++) > { > > if > (XML(itemOpeningArray[i])[EMAIL PROTECTED] == event.token.params.id) > { > var item:XML = > itemOpeningArray[i]; > > itemOpeningArray.removeItemAt(i); > > break; > } > } > > item.setChildren(treeXMLList); > } > else > { > treeDataProvider = treeXMLList; > } > > > } > > > protected function > handleItemFault(event:FaultEvent):void > { > Alert.show(event.fault.toString(), "Error > processing request"); > } > > > protected function sendRequest(id:uint):void > { > // Create POST params > var params:Object = new Object(); > params.id = id; > > // Dispathing request > var token:AsyncToken = itemService.send(params); > token.params = params; > } > > ]]> > </mx:Script> > > <mx:HTTPService id="itemService" method="POST" useProxy="false" > resultFormat="e4x" > result="handleItemResult(event)" > fault="handleItemFault(event)"/> > </mx:Tree> > > > > If you need more help, just ask. > > > Cheers, > > > On Mon, Aug 4, 2008 at 6:24 AM, Johannes Nel <[EMAIL PROTECTED]> wrote: > > The class you need to look at to load sub nodes on demand is > > the ITreeDataDescriptor and the method you ned to implement is public > > function getChildren(node:Object, model:Object=null):ICollectionView > > > > On Sun, Aug 3, 2008 at 9:50 AM, profiles_arun <[EMAIL PROTECTED]> > > wrote: > >> > >> Hi Jon, > >> > >> Thanks for you response, but basically i have the requirement to > >> load the complete tree. > >> Since am new, can you give me a snippet of code, which will load the > >> sub-nodes of the tree on demand ? > >> > >> Thanks in advance. > >> arun > >> > >> --- In flexcoders@yahoogroups.com, Jon Bradley <jbradley@> wrote: > >> > > >> > > >> > On Aug 2, 2008, at 7:25 AM, profiles_arun wrote: > >> > > >> > > I have a tree, which has 21000 plus nodes, when i load the .swf > >> file > >> > > in IE, it crashes. As such i dont get any error messages, so i > >> > > checked into widows application error log and found this error > >> > > > >> > > "Faulting application iexplore.exe, version 7.0.6000.16674, > >> faulting > >> > > module fldbg9f.ocx, version 9.0.124.0, fault address 0x00241305." > >> > > >> > Your first problem is how much data you are loading into a tree. In > >> my > >> > opinion, there is no reason to be doing that. > >> > > >> > Second problem, IE 7. It's the absolute worst browser on the > >> planet > >> > with CPU and memory management. Try this in Firefox. Although you > >> > might crash, it will probably take longer to crash (unless there's > >> a > >> > bug in the debug flash player). > >> > > >> > > Below is the snippet of my impl. Please suggest a solution, to > >> > > overcome this issue. > >> > > >> > Your solution to overcome the issue is as you already found - > >> don't > >> > try to load that much information into a Tree. > >> > > >> > cheers, > >> > > >> > jon > >> > > >> > > > > > > > > -- > > j:pn > > \\no comment > > > > > > -- > Guilherme Blanco - Web Developer > CBC - Certified Bindows Consultant > Cell Phone: +55 (16) 9166-6902 > MSN: [EMAIL PROTECTED] > URL: http://blog.bisna.com > Rio de Janeiro - RJ/Brazil >