Flex Tree 中有可以用程序打开根节点并定位到字节点的操作,那么有expandItem & scrollToIndex 两个方法就很有用。
1.expandItem 是Tree 和 AdvancedDatagrid特有的属性,就是打开或关闭导航树的分支节点。
2.scrollToIndex是listClasses 和 AdvancedListBase 类特有的属性,确保给定索引处的数据提供程序项目可见。
3.isItemOpen 是listClasses 和 AdvancedListBase 类特有的属性,如果指定的分支节点处于打开状态,则返回 true
。
<?xml version="1.0" encoding="utf-8"?> <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%"> <fx:Declarations> <fx:XMLList id="treeData"> <node label="Mail Box"> <node label="Inbox"> <node label="Marketing"/> <node label="Product Management"/> <node label="Personal"/> </node> <node label="Outbox"> <node label="Professional"/> <node label="Personal"/> </node> <node label="Spam"/> <node label="Sent"/> </node> </fx:XMLList> </fx:Declarations> <fx:Script> <![CDATA[ import mx.events.ListEvent; private function comboBox_change(evt:ListEvent):void { var team:String = ComboBox(evt.currentTarget).selectedItem.@label; var node:XMLList = treeData.node.node.(@label == team); expandParents(node[0]); tree.selectedItem = node[0]; var idx:int = tree.getItemIndex(node[0]); tree.scrollToIndex(idx); } private function expandParents(node:XML):void { if (node && !tree.isItemOpen(node)) { tree.expandItem(node, true); expandParents(node.parent()); } } ]]> </fx:Script> <mx:ComboBox id="comboBox" prompt="Please select a team..." dataProvider="{treeData.node.node}" labelField="@label" change="comboBox_change(event);"/> <mx:Tree id="tree" dataProvider="{treeData}" labelField="@label" showRoot="false" width="300" rowCount="8" /> </s:VGroup>