动态改变Flex Chart的类型

通常,我们可以新建的Flex chart对象代替移除先前的对象,从而动态改变Flex Chart的类型,这个过程很烦琐。此处推荐一个更好的办法:使用getDefinitionByName()方法。

点击此处查看该实例最终效果,点击此处下载该实例的源码。

本实例只涉及CartesianChart(笛卡尔图表),改变图表类型的本质就上改变其Series(数据系列)类型。因此我们直接扩展了各种笛卡尔数据系列,然后使用getDefinitionByName()动态实例化数据数列类,核心代码在seriesType的set访问器中。

public function set seriesType(value:String):void
{
    _seriesType = value;
    var seriesArr:Array = this.series;
    var ClassReference:Class = getDefinitionByName("components.chart.series." + _seriesType) as Class;
    var s:Series = new ClassReference();
    seriesArr[0] = s;
    this.series = seriesArr;
}

另外,我们还为seriesType使用了Inspectable元数据标签:
[Inspectable(category="General", enumeration="Line,Mountain,Candlestick,HLOC", defaultValue="Mountain")]
该元数据标签会在Flash Builder中生成seriesType属性列表,以供开发人员选择使用。

发表评论