我有一个带有'itemRenderer'的情节图表来渲染文本。我让渲染器工作正常。现在,如果它低于/高于某个值,我想显示/隐藏一些图表组合。我使用'Label'组件作为'itemRenderer'并覆盖'data'函数(请在下面找到我的渲染器组件..)。
如果图表数据提供者的大小大于“100”,我想隐藏所有“事件”,其严重程度为“低”。为此,我需要获得对数据提供者的引用,但不确定如何...?
有没有人遇到过这个问题?
public class EventChartItemRenderer extends Label
{
private var chartItem:ChartItem;
private var evtLblTxt:String;
private var txtBorderColor:uint;
private var showHide:Boolean;
public function EventChartItemRenderer()
{
super();
}
override public function set data(val:Object):void {
chartItem = val as ChartItem;
var event:DeviceEventDetails = chartItem.item as DeviceEventDetails;
if(event.severity == 2){
evtLblTxt = "2";
txtBorderColor = 0xFFD685;
showHide = false;
}else if(event.severity == 4){
evtLblTxt = "4";
txtBorderColor = 0xE68D53;
showHide = true;
}else if(event.severity == 6){
evtLblTxt = "6";
txtBorderColor = 0xB870DB;
showHide = true;
}
}
override public function get data():Object {
return chartItem;
}
override protected function commitProperties():void {
super.commitProperties();
if(!showHide) return;
this.text = evtLblTxt;
this.setStyle("color", txtBorderColor);
this.setStyle("fontWeight", "bold");
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
if(!showHide) return;
var rc:Rectangle = new Rectangle(0, 0, unscaledWidth, unscaledHeight);
var g:Graphics = graphics;
g.clear();
g.moveTo(rc.left, rc.top);
g.lineStyle(1, txtBorderColor, 0.8);
g.lineTo(rc.width, rc.top);
g.lineTo(rc.width, rc.bottom+4);
g.lineTo(rc.left, rc.bottom+4);
g.lineTo(rc.left, rc.top);
g.endFill();
}
}
它实际上是chartItem.element。并且您需要将其强制转换为'ChartElement',因为'element'指的是接口'IChartElement'并访问'dataProvider'属性。 'chartDataProvider'是只写的。因此,正确的访问方式是......
(chartItem.element as ChartElement).dataProvider。
答案 0 :(得分:0)
ChartItem
具有IChartElement
属性,可以访问图表数据提供者:
chartItem.item.chartDataProvider.length > 100