碰到了要写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
不难,就是一种用法,当作第一篇。