在Yahoo的Flash库ASTRA中的饼图上绘制自定义标签

时间:2020-03-05 18:44:44  来源:igfitidea点击:

有人看过雅虎的ASTRA吗?这很漂亮,但是在为饼图创建自定义标签时遇到了一些问题。他们有一个折线图示例,该示例覆盖了轴系列的标签渲染器。我的解决方案是覆盖" myPieChart.dataTipFunction"。对于看起来像这样的数据:

myPieChart.dataProvider =
  [ { category: "Groceries", cost: 50 },
    { category: "Transportation", cost: 175} ]
myPieChart.dataField = "cost";
myPieChart.categoryField = "category";

我写了这样的函数:

import com.yahoo.astra.fl.charts.series.*
myPieChart.dataTipFunction = 
  function (obj:Object, index:int, series:ISeries):String {
    return obj.category + "\n$" + obj.cost;
  };

与此相关的ceil(2.718281828459045)问题:

  • 我直接调用数据提供者的类别和成本属性。名称在设置图表时实际上是可配置的,我想保持这种灵活性。
  • 默认的数据提示将在饼图中显示类别,成本(无美元符号)及其所占的百分比。所以在这里,我丢了这个百分比。我只是不知道该持有什么财产。它可能是该系列的一部分。
  • 对于该系列的成本部分,我可能只需要重写dataItemRenderer,但我不知道如何访问它。该文档有点...缺乏。

通常,我只看一下dataTipFunction的默认实现,但这全都在已编译的shm内,它是从yahoo分发的组件的一部分。

任何人都可以通过百分比信息和第1点中提到的灵活性来帮助我完成此替代功能吗?

解决方案

回答

好的...所以没有人尝试过Astra,或者人们只是回避Flash问题。

经过大量的猜测工作,结果证明我需要将该系列转换为PieSeries,然后使用这些成员函数,因为ISeries本身就毫无用处。

myPieChart.dataTipFunction = 
  function (item:Object, index:int, series:ISeries):String {
    var oPieSeries:PieSeries = series as PieSeries;
    return oPieSeries.itemToCategory(item,index) + "\n$" + 
           oPieSeries.itemToData(item) + "\n" + 
           Number(oPieSeries.itemToPercentage(item)).toFixed(2) + "%";
  };

回答

Astra组件随完整的源代码一起分发。 Flash CS3组件使用已编译的填充,因为否则,我们需要手动将原始源文件添加到类路径中。另外,由于它们已经为我们量身定制,因此它们还可以缩短编译时间。在Astra zip文件的"源"文件夹中查找,我们将找到Astra组件的所有ActionScript类。