Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 在flex树组件中隐藏节点,使子节点可见_Apache Flex_Actionscript_Tree - Fatal编程技术网

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 ]);