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
3.修改ArrayCollection后,同时修改LineChart的series

实例中,新增,即为新增一个line的数据ArrayCollection,里面对象的结构为 ,时间Date,设备名称(“设备+随机数”),时间的值是1-12小时,设备名称的值是一个随机数
- <span style="color:#006600;"> 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;
- }
- </span>
而后判断,如果是新增line,直接将该ArrayCollection作为lineChart的数据源;否则修改lineChart的数据源,将新增line设备名称属性,作为lineChart的数据源的一个新属性
此时出现的问题是,新增一个line的数据ArrayCollection的对象除了时间Date是固定的,其他属性(设备名称) 其实是动态生成的,也就说,这是个动态对象。要获取动态对象的属性方法如下
- <span style="color:#006600;"> /** 返回对象的某个属性名称
- * @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];
- }</span>
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即刻
- <span style="color:#006600;"> /*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;//给图表系列赋值</span>
移除一条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.youkuaiyun.com/detail/kkkloveyou/4705198