2011-04-09 172 views
0

我有一個數據提供程序,採取以下形式的樹:隱藏節點

<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> 

我要顯示這樣

Cars 
    A 
      A1 
      A2 
    B 
      B1 
      B2 

樹這是我想隱藏contact_person和list節點。從dataprovider中刪除節點無法完成。因此,我所做的是通過擴展DefaultDataDescriptor來創建自定義樹數據描述符。然後重寫getChildren方法並將filterfunction應用於集合由super.getChildren.T返回他的問題是當我隱藏'list'節點時,我不能讓子節點顯示出來。所以有什麼辦法可以隱藏'list',但顯示'node'的子節點?

回答

0

通過XML作爲dataProvider適合演示,並且在涉及到真正的產品時不起作用。最常見的做法是解析XML到強類型的對象:

public class Details 
{ 
    public function Details(xml:XML) 
    { 
     label = [email protected]; 
     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 = [email protected]; 
     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 = [email protected]; 
    } 

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

爲了簡化我在構造函數解析XML代碼。變量也可以變成只讀屬性。

+0

這個解決方案是完美的,但是當我們擁有巨大的xml權利時,會引發嚴重的性能問題。對於這個問題,任何其他解決方法 – user700284 2011-04-10 14:53:08

+0

這是多達1000個對象的最佳方式。如果你有更多的話,你需要拆分幀之間的分析,例如與'定時器'。 – 2011-04-12 18:57:34