2010-01-23 5 views
0

내가 좋아하는 원격 객체로 가져온 XML 문자열이 다음 XML 예제에서 볼 수 있듯이플렉스 트리 사용자 트리보기

<metadata> 
    <system name="A"> 
    <serviceGroup name="SG1"> 
     <version id="id1" /> 
     <service name="S1"/> 
    </serviceGroup> 
    <serviceGroup name="SG2"> 
     <version id="id2" /> 
     <serviceGroup name="SG3"> 
     <version id="id3" /> 
     <service name="S2"/> 
     </serviceGroup> 
    </serviceGroup> 
    </system> 
. 
. 
. 
. 
</metadata> 

을,이 중첩 servicegroups가 포함되어 있습니다. 모든 서비스와 서비스 그룹을 표시해야합니다. 그리고 다른 모든 것을 무시하십시오. 버전 서비스입니다. S1 및 S2는 리프 노드 여야하며 그 외 모든 것은 부모 여야합니다.

예 :
->를
---> SG1
------> S1
----> SG2
------> SG3
-------- -> S2
.
.
.

나는 labelFunctions, labelField 속성을 Tree와 함께 사용하는 것과 같은 모든 종류의 것을 시도했지만 도움이되지 않습니다. 나는 항상 레이블이없는 나뭇잎으로 끝난다.

나는 이것을 ITreeDataDescriptor로 할 수 있다고 생각하지만 확실하지는 않습니다. 나는 초보자이고 adobe sample은 너무 많은 도움이되지 않았다.

나는 위의 튜토리얼이 초보자에게는 너무 복잡하다고 생각한다. 누군가가 나를 더 간단하게 가리킬 수 있다면 정말 고맙겠습니다.

덕분에, 하기 Sandeep

답변

0

나는 당신의 접근 방식이 다시 약간을 유지 할 수있다 생각합니다. 컨트롤의 기본 동작을 변경하거나 해당 컨트롤에 제공하는 데이터를 변경하는 것이 더 쉽습니까?

내 의견으로는 먼저 트리의 dataprovider를 XMLList metadata.system.serviceGroup으로 변경해야합니다. (이미이 작업을 수행하고있을 수 있습니다. 이미 사용중인 코드 예제 없이는 말할 수 없습니다. 견딜 수 없는). 그런 다음 해당 목록을 반복하여 버전 노드를 제거해야합니다.

delete yourXMLList.serviceGroup.version[0]; 

더 좋은 코드 예제를 검색 할 수 있습니다.

0

ITreeDataDescriptor의 getChildren 함수를 재정의해야합니다.

package { 
import mx.collections.ICollectionView; 
import mx.collections.XMLListCollection; 
import mx.controls.treeClasses.ITreeDataDescriptor; 

public class CustomDataDescriptor extends ITreeDataDescriptor 
{ 
    public function getChildren(node:Object, model:Object = null):ICollectionView 
    { 
     var list:XMLList = XMLList(node.*); 
     var listColl:XMLList = new XMLList(); 

     var listLenght:int = list.length() 

     var j:Number = 0; 
     // gether items which should be visible 
     for (var i:int = 0; i < listLenght; i++) 
     { 

      if (list[i].localName() != "version") 
      { 
       listColl[j] = list[i]; 
       j++ 
      }     
     } 

     return new XMLListCollection(listColl); 
    } 

    public function hasChildren(node:Object, model:Object = null):Boolean 
    {    
     return isBranch(node, model);  
    } 

    public function isBranch(node:Object, model:Object = null):Boolean 
    {    
     var list:XMLList = XMLList(node.Group); 

     return list.length() > 0; 
    } 

    public function getData(node:Object, model:Object = null):Object 
    { 
     return Object(node); 
    } 

    public function addChildAt(parent:Object, newChild:Object, index:int, model:Object = null):Boolean 
    { 
     return false; 
    } 

    public function removeChildAt(parent:Object, child:Object, index:int, model:Object = null):Boolean 
    { 
     return false; 
    } 
} 

}

을하고 나무에 새 dataDiscriptor을 할당 : 거기 당신은 볼 수 있어야하는 XML 노드를 필터링 할 수 있습니다

<mx:Tree id="customTree" dataDescriptor="{new DisplayGroupsTreeDataDescriptor()}"/>