2009-11-17 53 views
0

我正在使用Flex DateTimeAxis。我有一個場景,DateTimeAxis有時會在Axis上創建重複的月份。月份標籤單元是基於提供給DateTimeAxis的最小/最大值生成的,它不是由系列數據生成的,據我所知。換句話說,在提供給圖表的數據中不存在重複,但它是自動標籤生成過程的一部分,DateTimeAxis將在爲軸提供最小/最大值時執行該過程。爲什麼flex DateTimeAxis會在軸上創建重複的月份?

我在下面包含了這個問題的一個簡化例子。任何幫助表示讚賞。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> 

<mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 

     [Bindable] 
     public var stockDataAC:ArrayCollection = new ArrayCollection([ 
      {date: new Date(2009,4), close: 41.71}, 
      {date: new Date(2009,5),close: 42.21}, 
      {date: new Date(2009,6), close: 42.11}, 
      {date: new Date(2009,7), close: 42.71}, 
      {date: new Date(2009,9), close: 42.99} 
      ]); 

     [Bindable] private var min:Date = new Date(2009,4); 
     [Bindable] private var max:Date = new Date(2010,3); 

     private function formatDate(value:Date,previousValue:Date,axis:DateTimeAxis):String {    
      var dateLabel:String = df.format(value); 

      return dateLabel; 
     } 
    ]]> 
</mx:Script> 

<mx:DateFormatter id="df" formatString="MMM YY"/> 
<mx:Panel title="DateTimeAxis Example" height="100%" width="100%"> 

    <mx:LineChart id="mychart" height="100%" width="100%" 
     paddingRight="5" paddingLeft="5" 
     showDataTips="true" dataProvider="{stockDataAC}"> 

     <mx:horizontalAxis> 
      <mx:DateTimeAxis dataUnits="months" labelUnits="months" alignLabelsToUnits="false" labelFunction="formatDate" minimum="{min}" maximum="{max}"/> 
     </mx:horizontalAxis> 

     <mx:verticalAxis> 
      <mx:LinearAxis baseAtZero="false" /> 
     </mx:verticalAxis> 

     <mx:series> 
      <mx:LineSeries yField="close" xField="date" displayName="AAPL"/> 
     </mx:series> 
    </mx:LineChart> 

</mx:Panel> 

回答

1

這個問題似乎是在formatDate功能。

試試這個:

private function formatDate(value:Date,previousValue:Date,axis:DateTimeAxis):String 
    { 
     trace("Current Value: " + value);    
     trace("Previous Value: " +previousValue); 
     trace("****");   
     var dateLabel:String = df.format(value); 
     return dateLabel; 
    } 

而你,也就能夠在輸出地看到,由於某種原因的日期具有與格式引起該問題的不同GMT:

Current Value: Sun Nov 1 00:00:00 GMT-0400 2009 
Previous Value: Thu Oct 1 00:00:00 GMT-0400 2009 
**** 
Current Value: Mon Nov 30 23:00:00 GMT-0500 2009 
Previous Value: Sun Nov 1 00:00:00 GMT-0400 2009 
**** 

希望這有助於,