flex4 动态获取对象属性,动态生成数据源,动态生成lineChart,清除数据。
2012-10-31 10:00
676 查看
1.该图表的数据源为ArrayCollection类型的arrayC
2.每增加一条线,其实就是增加一个数据源中的ArrayCollection每个对象的一个属性,且属性名不能重复
3.修改ArrayCollection后,同时修改LineChart的series
实例中,新增,即为新增一个line的数据ArrayCollection,里面对象的结构为 ,时间Date,设备名称(“设备+随机数”),时间的值是1-12小时,设备名称的值是一个随机数
而后判断,如果是新增line,直接将该ArrayCollection作为lineChart的数据源;否则修改lineChart的数据源,将新增line设备名称属性,作为lineChart的数据源的一个新属性
此时出现的问题是,新增一个line的数据ArrayCollection的对象除了时间Date是固定的,其他属性(设备名称) 其实是动态生成的,也就说,这是个动态对象。要获取动态对象的属性方法如下
ObjectUtil 类是一个全静态类,["properties"]可以返回对象属性的数组,只要知道属性在对象中的排位,就可以获得该属性名 ,动态生成数据源如下:
数据源更新了以后,只需要按照数据源arrayC中对象属性名,生成相应的LineSeries,并将LineSeries 添加到LineChart的series即刻
移除一条line的过程是相反的,也是类似,首先修改数据源的arrayC,将要移除的属性删除,而后相应的修改myChart.series
完整实例 下载 地址:http://download.csdn.net/detail/kkkloveyou/4705198
2.每增加一条线,其实就是增加一个数据源中的ArrayCollection每个对象的一个属性,且属性名不能重复
3.修改ArrayCollection后,同时修改LineChart的series
实例中,新增,即为新增一个line的数据ArrayCollection,里面对象的结构为 ,时间Date,设备名称(“设备+随机数”),时间的值是1-12小时,设备名称的值是一个随机数
private function createArray():ArrayCollection{ var ac:ArrayCollection = new ArrayCollection(); var name:String = "设备"+ Math.floor(Math.random()*10); for(var i:int=0;i<12;i++){ var o:Object = new Object(); o.Date = i+"时"; o[name] = Math.floor(Math.random()*10); ac.addItem(o); } return ac; }
而后判断,如果是新增line,直接将该ArrayCollection作为lineChart的数据源;否则修改lineChart的数据源,将新增line设备名称属性,作为lineChart的数据源的一个新属性
此时出现的问题是,新增一个line的数据ArrayCollection的对象除了时间Date是固定的,其他属性(设备名称) 其实是动态生成的,也就说,这是个动态对象。要获取动态对象的属性方法如下
/** 返回对象的某个属性名称 * @author kkkloveyou 2012-10-23 * @param obejct 动态对象 * @param index 要获取第几个对象的属性 * @return name */ public function getObjectProperties(obejct:Object,index:int):String{ var objInfo:Object = ObjectUtil.getClassInfo(obejct); //获取到对象的属性列表 var fieldName:Array = objInfo["properties"] as Array; return fieldName[index]; }
ObjectUtil 类是一个全静态类,["properties"]可以返回对象属性的数组,只要知道属性在对象中的排位,就可以获得该属性名 ,动态生成数据源如下:
/*判断 数据源是否为空,为空直接放入第一个ArrayCollection对象 ,否则 将自己的第二个属性值加入到数据源中*/ if(arrayC.length>0){ var newAc:ArrayCollection = createArray(); for(var a:String in arrayC){ for(var b:String in newAc){ if(arrayC[a].Date == newAc[b].Date){ var name :String = getObjectProperties(newAc[b] ,1); arrayC[a][name] = newAc[b][name]; trace("增加属性:"+newAc[b][name]); break; } } } }else{ arrayC = createArray(); } /*根据数据源动态生成线*/ /*1.取出每个要增加对象的属性 name */ /* 拿到ArrayCollection的第一个对象,就可以拿到他的所有属性名*/ var obejct:Object = arrayC.getItemAt(0); var objInfo:Object = ObjectUtil.getClassInfo(obejct); var fieldNames:Array = objInfo["properties"] as Array; var newFileNames:Array = []; for each(var q:String in fieldNames){ if(q!="Date"){ newFileNames.push(q); } }
数据源更新了以后,只需要按照数据源arrayC中对象属性名,生成相应的LineSeries,并将LineSeries 添加到LineChart的series即刻
/*2.根据name 取出相应 对象值*/ array = []; for(var b:String in newFileNames){ var lineSeries:LineSeries=new LineSeries(); //设置图表的系列 lineSeries.xField="Date" lineSeries.yField = newFileNames[b]; lineSeries.displayName = newFileNames[b]; lineSeries.setStyle("form", "curve"); //lineSeries.setStyle("lineStroke",s1); //替换或者新增 array.push( lineSeries ); } myChart.series = array;//给图表系列赋值
移除一条line的过程是相反的,也是类似,首先修改数据源的arrayC,将要移除的属性删除,而后相应的修改myChart.series
/** 移除数据 * @author kkkloveyou 2012-10-23 * @return name 要删除的属性名 */ private function removeFromArray(name:String):void{ for(var a:String in arrayC){ trace("删除属性:"+arrayC[a][name]); delete arrayC[a][name]; } array = []; for(var b:String in myChart.series){ if(myChart.series[b].yField !=name){ array.push(myChart.series[b]); } } myChart.series = array ; legend_id.dataProvider = myChart; }
完整实例 下载 地址:http://download.csdn.net/detail/kkkloveyou/4705198
相关文章推荐
- flex4 动态获取对象属性,动态生成数据源,动态生成lineChart,清除数据。
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】
- 基于.net webservices和Flex LineChart组件的动态数据监控
- 动手实现扩展属性为对象动态添加获取数据(续)
- 动手实现扩展属性为对象动态添加获取数据
- 利用反射机制动态获取对象属性名称及数据类型
- 利用反射机制动态获取对象属性名称及数据类型
- 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间
- Ajax获取php返回json数据动态生成select下拉框
- 利用Java反射机制和Javassist实现Java对象及其属性的动态创建生成
- JAVA 爬虫获取js动态生成的网页数据
- 在python的类中动态添加属性与生成对象
- java反射动态给对象属性赋值,并获取属性值
- python动态获取对象的属性和方法
- 使用 HighCharts 动态获取后台数据生成图表
- Flex中LineChart自动生成线形图
- 记录:ajax获取数据动态生成select下拉选js部份
- 利用Java反射机制和Javassist实现Java对象及其属性的动态创建生成
- Flex动态获取数据,服务中断报错
- python动态获取对象的属性和方法