Apache flex 在flex树组件中隐藏节点,使子节点可见
我有一个带有数据提供者的树,其形式如下:Apache flex 在flex树组件中隐藏节点,使子节点可见,apache-flex,actionscript,tree,Apache Flex,Actionscript,Tree,我有一个带有数据提供者的树,其形式如下: <details name="Cars"> <contact_person>aaaa</contact_person> <list> <car type="A"> <car name="A1"/> <car name="A2"/> </car> &l
<details name="Cars">
<contact_person>aaaa</contact_person>
<list>
<car type="A">
<car name="A1"/>
<car name="A2"/>
</car>
<car type="B">
<car name="B1"/>
<car name="B2"/>
</car>
</list>
</details>
也就是说,我想隐藏联系人和列表节点。无法从数据提供程序中删除节点。因此,我所做的是通过扩展DefaultDataDescriptor来创建自定义树数据描述符。然后重写getChildren方法,并对super.getChildren返回的集合应用filterfunction。问题是在我隐藏时“列表”节点我无法显示子节点。因此,是否有任何方法可以隐藏“列表”,但显示“节点”的子节点?将
XML
传递为数据提供程序
对演示很好,在实际产品中不起作用。通常的做法是将XML
解析为强类型对象:
public class Details
{
public function Details(xml:XML)
{
label = xml.@name;
var childrenArray:Array = [];
for each (var carNode:XML in xml.list.car)
{
childrenArray.push(new CarType(carNode));
}
children = new ArrayCollection(childrenArray);
}
[Bindable]
public var label:String;
[Bindable]
public var children:ArrayCollection /* of CarType */;
}
public class CarType
{
public function CarType(xml:XML)
{
label = xml.@type;
var childrenArray:Array = [];
for each (var carNode:XML in xml.car)
{
childrenArray.push(new Car(xml));
}
children = new ArrayCollection(childrenArray);
}
[Bindable]
public var label:String;
[Bindable]
public var children:ArrayCollection /* of Car */;
}
public class Car
{
public function Car(xml:XML)
{
label = xml.@name;
}
[Bindable]
public var label:String;
}
用法:
var xml:XML = <details name="Cars">...</details>;
var details:Details = new Details(xml);
var tree:Tree = new Tree();
tree.dataProvider = new ArrayCollection([ details ]);
var-xml:xml=。。。;
var详细信息:详细信息=新详细信息(xml);
变量树:tree=newtree();
tree.dataProvider=新的ArrayCollection([details]);
为了简化代码,我在构造函数中解析XML。变量也可以转换为只读属性。此解决方案非常完美。但是,如果我们正确使用庞大的xml,它将带来严重的性能问题。因此,任何其他解决方法这是最多1000个对象的最佳方法。如果您有更多,则需要在帧之间拆分解析,例如使用
计时器
。
var xml:XML = <details name="Cars">...</details>;
var details:Details = new Details(xml);
var tree:Tree = new Tree();
tree.dataProvider = new ArrayCollection([ details ]);