flex4 動態擷取對象屬性,動態產生資料來源,動態產生lineChart,清除資料。

來源:互聯網
上載者:User

1.該圖表的資料來源為ArrayCollection類型的arrayC
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.