加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex4 动态获取对象属性,动态生成数据源,动态生成lineChart,

发布时间:2020-12-15 04:11:01 所属栏目:百科 来源:网络整理
导读:1.该图表的数据源为ArrayCollection类型的arrayC 2.每增加一条线,其实就是增加一个数据源中的ArrayCollection每个对象的一个属性,且属性名不能重复 3.修改ArrayCollection后,同时修改LineChart的series 实例中,新增,即为新增一个line的数据ArrayCollect
1.该图表的数据源为ArrayCollection类型的arrayC
2.每增加一条线,其实就是增加一个数据源中的ArrayCollection每个对象的一个属性,且属性名不能重复
3.修改ArrayCollection后,同时修改LineChart的series




实例中,新增,即为新增一个line的数据ArrayCollection,里面对象的结构为 ,时间Date,设备名称(“设备+随机数”),时间的值是1-12小时,设备名称的值是一个随机数

[html]? view plain copy
  1. <span?style="color:#006600;">???????????private??function?createArray():ArrayCollection{??
  2. ????????????????var?ac:ArrayCollection?=?new?ArrayCollection();??
  3. ????????????????var?name:String?=?"设备"+?Math.floor(Math.random()*10);??
  4. ???????????????????
  5. ????????????????for(var?i:int=0;i12;i++){??
  6. ????????????????????var?o:Object?=?new?Object();??
  7. ????????????????????o.Date?=?i+"时";??
  8. ????????????????????o[name]?=??Math.floor(Math.random()*10);??
  9. ????????????????????ac.addItem(o);??
  10. ????????????????}??
  11. ??????????????????
  12. ????????????????return?ac;??
  13. ????????????}???
  14. </span>??



而后判断,如果是新增line,直接将该ArrayCollection作为lineChart的数据源;否则修改lineChart的数据源,将新增line设备名称属性,作为lineChart的数据源的一个新属性
此时出现的问题是,新增一个line的数据ArrayCollection的对象除了时间Date是固定的,其他属性(设备名称) 其实是动态生成的,也就说,这是个动态对象。要获取动态对象的属性方法如下
copy
    >???????????/**?返回对象的某个属性名称??
  1. ?????????????*?@author?kkkloveyou?2012-10-23??
  2. ?????????????*?@param?obejct??动态对象??
  3. ?????????????*?@param?index?要获取第几个对象的属性??
  4. ?????????????*?@return?name??
  5. ?????????????*/??
  6. ????????????public?function?getObjectProperties(obejct:Object,index:int):String{??
  7. ???????????
  8. ????????????????var?objInfo:Object?=?ObjectUtil.getClassInfo(obejct);???
  9. ????
  10. ????????????????//获取到对象的属性列表??
  11. ????????????????var?fieldName:Array?=?objInfo["properties"]?as?Array;???
  12. ???
  13. ????????????????return?fieldName[index];??
  14. ????????????}

    ObjectUtil 类是一个全静态类,["properties"]可以返回对象属性的数组,只要知道属性在对象中的排位,就可以获得该属性名 ,动态生成数据源如下:
    copy
    /*判断?数据源是否为空,为空直接放入第一个ArrayCollection对象??,否则?将自己的第二个属性值加入到数据源中*/??
  1. ????????????????if(arrayC.length>0){??
  2. ????????????????????var?newAc:ArrayCollection?=?createArray();??
  3. ????????????????????for(var?a:String?in?arrayC){??
  4. ????????????????????????for(var?b:String?in?newAc){??
  5. ????????????????????????????if(arrayC[a].Date?==????newAc[b].Date){??
  6. ????????????????????????????????var?name?:String?=?getObjectProperties(newAc[b]?,1);??
  7. ????????????????????????????????arrayC[a][name]?=?newAc[b][name];??
  8. ????????????????????????????????trace("增加属性:"+newAc[b][name]);??
  9. ????????????????????????????????break;??
  10. ????????????????????????????}??
  11. ????????????????????????}?????????
  12. ????????????????????}??
  13. ????????????????}else{??
  14. ????????????????????arrayC?=?createArray();???
  15. ????????????????/*根据数据源动态生成线*/??
  16. ????????????????/*1.取出每个要增加对象的属性?name???*/??
  17. ????????????????/*?拿到ArrayCollection的第一个对象,就可以拿到他的所有属性名*/??
  18. ????????????????var?obejct:Object?=?arrayC.getItemAt(0);??
  19. ????????????????var?objInfo:Object?=?ObjectUtil.getClassInfo(obejct);???
  20. ????????????????var?fieldNames:Array?=?objInfo["properties"]?as?Array;???
  21. ????????????????var?newFileNames:Array?=?[];??
  22. ????????????????for?each(var?q:String?in?fieldNames){???
  23. ????????????????????if(q!="Date"){??
  24. ????????????????????????newFileNames.push(q);??
  25. ????????????????????}??
  26. ??
  27. ??
  28. ????????????????}????


数据源更新了以后,只需要按照数据源arrayC中对象属性名,生成相应的LineSeries,并将LineSeries ?添加到LineChart的series即刻
copy
    >???????????????/*2.根据name??取出相应??对象值*/??
  1. ??????????????????
  2. ????????????????array?=?[];??
  3. ????????????????for(var?b:String?in?newFileNames){??
  4. ????????????????????var?lineSeries:LineSeries=new?LineSeries();??//设置图表的系列??
  5. ????????????????????lineSeries.xField="Date"??
  6. ????????????????????lineSeries.yField?=?newFileNames[b];??
  7. ????????????????????lineSeries.displayName?=?newFileNames[b];??
  8. ????????????????????lineSeries.setStyle("form",?"curve");????
  9. ????????????????????//lineSeries.setStyle("lineStroke",s1);??
  10. ????????????????????//替换或者新增??
  11. ????????????????????array.push(?lineSeries?);??
  12. ????????????????}??
  13. ???????????????
  14. ????????????????myChart.series?=?array;//给图表系列赋值



    移除一条line的过程是相反的,也是类似,首先修改数据源的arrayC,将要移除的属性删除,而后相应的修改myChart.series
    copy
      /**?移除数据??
    1. ?????????????*?@return?name?要删除的属性名??
    2. ????????????private?function?removeFromArray(name:String):void{??
    3. ????????????????for(var?a:String?in?arrayC){??
    4. ????????????????????trace("删除属性:"+arrayC[a][name]);??
    5. ????????????????????delete?arrayC[a][name];??
    6. ????????????????array?=?[];??
    7. ????????????????for(var?b:String?in?myChart.series){??
    8. ????????????????????if(myChart.series[b].yField?!=name){??
    9. ????????????????????????array.push(myChart.series[b]);??
    10. ???????????????????????????
    11. ????????????????myChart.series?=?array?;??
    12. ??????
    13. ????????????????legend_id.dataProvider?=?myChart;??
    14. ????????????} ?
    15. 完整实例 下载 地址:http://download.csdn.net/detail/kkkloveyou/4705198

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读