2011-11-09 4 views
1

FlexのAreaChartのバグはどうなっていますか?それを修正する方法は誰にも分かりますか?これにより、minFieldsのツールチップに間違った値が表示されます。FlexのAreaChartのバグ

I.e.以下のために:

<mx:AreaSeries yField="TotalVariableCost" minField="TotalFixedCost" displayName="Total Cost"> 

これは、表示されます:

Total Cost 
high: TotalVariableCost 
low: TotalVariableCost 

とは対照的に:

Total Cost 
high: TotalVariableCost 
low: TotalFixedCost 
このバグはAreaSeries.asの2083年に行の2058をすると仮定されて

- しかし、その原料私の理解を超えています。

--Stephen

+0

これまでに同じ質問をしましたか? http://stackoverflow.com/questions/7928266/patching-flexs-areachart-bug – takteek

答えて

1

うん、それはのAreaSeriesのバグです。フレックス・チャートが設計されているばかげた方法のため、それを修正する唯一の現実的な方法は、AreaChartにカスタムdataTipFunctionを設定することです。私はただ一つの場所にformatForScreen(lowItem.minValue)formatForScreen(lowItem.yValue)を変更

/** 
* Create a data tip function for the given AreaSeries. Uses a copy of 
* the formatDataTip code from AreaSeries with the minValue bug fixed. 
* 
* @param series 
* @return a data tip function 
* 
*/ 
private function createAreaSeriesTipFunc(series:AreaSeries):Function { 
    var displayName:String = series.displayName; 
    var dataTransform:DataTransform = series.dataTransform; 
    var xField:String = series.xField; 
    var minField:String = series.minField; 

    // formatDataTip relies on AreaSeries member data so simulate that 
    // with a closure to minimize code modifications 

    return function(hd:HitData):String { 
     var dt:String = ""; 
     var n:String = displayName; 
     if (n && n != "") 
     dt += "<b>"+ n + "</b><BR/>"; 

     var xName:String = dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).displayName; 
     if (xName == "") 
     xName = xField; 
     if (xName != "") 
     dt += "<i>" + xName + ": </i>"; 

     var item:AreaSeriesItem = AreaSeriesItem(hd.chartItem); 
     var lowItem:AreaSeriesItem = (minField != "") ? 
     item : 
     null; 
     dt += dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).formatForScreen(item.xValue) + "\n"; 

     var yName:String = dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).displayName; 

     if (!lowItem) 
     { 
     if (yName != "") 
      dt += "<i>" + yName + ":</i> "; 
     dt += dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).formatForScreen(item.yValue) + "\n"; 
     } 
     else 
     { 
     if (yName != "") 
      dt += "<i>" + yName + " (high):</i> "; 
     else 
      dt += "<i>high: </i>"; 
     dt += dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).formatForScreen(item.yValue) + "\n"; 

     if (yName != "") 
      dt += "<i>" + yName + " (low):</i> "; 
     else 
      dt += "<i>low:</i> "; 
     dt += dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).formatForScreen(lowItem.minValue) + "\n"; 
     } 

     return dt; 
    }; 
} 

はここで固定バグと、関連するコードのコピーです。

<mx:AreaChart dataProvider="{chartData}" showDataTips="true" dataTipFunction="{createAreaSeriesTipFunc(areaSeries)}"> 
     <mx:series> 
     <mx:AreaSeries id="areaSeries" yField="TotalVariableCost" minField="TotalFixedCost" displayName="Total Cost" /> 
     </mx:series> 
</mx:AreaChart> 
+0

ありがとうたくさんの男!誰かがあなたの修正をコミットすることを期待して、これをflex-devに投稿してください。 –

関連する問題