Flex用GroupingCollection2建立tree的Hierarchy浅析

阅读更多
最近一直在actionscript下写程序

碰到了要写tree的情况,后台阿三给的是flat XML数据,数据收到转换后我用arraycollection去存
要自己在arraycollection上建立Hirarchy,对tree又不是那么熟,查查各种资料。
发现GroupingCollection2是一个不错的东西,用了之后感觉不错,写下来
这个是来自adobe的例子 Displaying grouped data,我参考的是actionscript版。

但是我遇到的问题是label显示的问题,当我group了2个以上的field之后
然后使用labelField="GroupLabel",结果是在最后一个结点也就是leaf的时候会出现[object someVo]问题。
即不能正常的显示出来,下面是主要部分code:

import mx.collections.GroupingField;
import mx.collections.Grouping;
import mx.collections.GroupingCollection2;
import mx.collections.ArrayCollection;

[Bindable]
public var myGColl:GroupingCollection2 = new GroupingCollection2();

private var myGrp:Grouping = new Grouping();

private function initDG():void {     

  //dpFlat是arraycollection数据
  myGColl.source = dpFlat;
  
  myGrp.fields =  [new GroupingField("Initiative"), new GroupingField("Progrom")];  
   
   //使用GroupLabel显示label,很方便,
   //但这样会出现末端结点的[object someVo]问题     
   myGrp.label = "GroupLabel";  
            
   myGColl.grouping = myGrp;

   myADG.dataProvider = myGColl;
            
   myGColl.refresh();

   myTree.dataProvider = gc.getRoot();
}        


乱试了很多别的都没办法解决,只能用labelfunction去弄了,为此来问了另一个阿三( 他的blog), 惭愧, 下面是labelfunction的code:

private function myLabelFunction(item:Object):String{
   if(item.hasOwnProperty('GroupLabel')){ // 这个判定重要
        return item.GroupLabel;
    } else if (item is TestItem){ 
        return item.year;
    } else {
        return item.toString();
}


好了,搞定,本来这是给AdvanceDataGrid里tree用的,我这用来直接tree
不难,就是一种用法,当作第一篇。


你可能感兴趣的:(actionscript,adobe)