2013-06-25 160 views
0

我正在學習flex,但我無法理解操作腳本覆蓋的基本原理 - 分配自定義處理程序並調用該類的超類不會產生與我從正常繼承機制中懷疑的結果相同的結果。如何覆蓋flex組件的渲染?

例如 - 圖表系列具有屬性ItemRenderer - 用鼠標指出基類繼承?在我的情況 -

mx.charts.chartClasses.HLOCSeriesBase.itemRenderer 

Flex幫助給出了這樣的:

itemRenderer 
Type: mx.core.IFactory CSS Inheritance: No 
Language Version: ActionScript 3.0 Product Version: Flex 3 Runtime Versions: Flash9, AIR 1.1 

A factory that represents the class the series will use to represent individual items on the chart. This class is instantiated once for each element in the chart. Classes used as an itemRenderer should implement the IFlexDisplayObject, ISimpleStyleClient, and IDataRenderer interfaces. The data property is assigned the chartItem that the skin instance renders. 

所以我去上創建了一個類巫婆繼承了:

package { // Empty package. 

    import mx.charts.series.items.HLOCSeriesItem; 
    import mx.core.IDataRenderer; 
    import mx.core.IFlexDisplayObject; 
    import mx.styles.ISimpleStyleClient; 
    import flash.display.Graphics; 
    import mx.charts.chartClasses.HLOCSeriesBase; 
    import mx.charts.series.CandlestickSeries; 

    public class CycleColorRenderer extends HLOCSeriesBase 

    implements IFlexDisplayObject, ISimpleStyleClient, IDataRenderer { 

    private var _chartItem:HLOCSeriesItem; 

    public function CycleColorRenderer() { 
     super(); 
    } 

    public function get data():Object { 
     return _chartItem; 
    } 

    public function set data(value:Object):void { 
     _chartItem = value as HLOCSeriesItem; 
     invalidateDisplayList(); 
    } 


    override protected function 
    updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void { 
      super.updateDisplayList(unscaledWidth, unscaledHeight); 
    } 
} 

MXML應用渲染reasignment:

<mx:CandlestickSeries 
dataProvider="{TICKER}" 
openField="open" 
highField="high" 
lowField="low" 
closeField="close" 
displayName="TICKER" 
itemRenderer="CycleColorRenderer" 
> 

它編譯正常,但運行它看到一個空的列表,並且作爲C和一些C++程序員,我無法理解這裏會出現什麼問題 - 所有實例都在做什麼基類?

也許有一些關於繼承的特定語言的概念?

+0

向我們展示如何使用渲染器。 – JeffryHouser

+0

@ Reboog711你的意思是MXML屬性賦值?我更新了我的問題 – Ulterior

+0

是的,我想這就是我的意思。通常在指定一個類時使用完全限定的路徑名​​;然而,因爲你沒有得到一個編譯器錯誤,可能不是問題。審覈您的渲染器代碼;我不清楚爲什麼你的CycleColorRenderer的顯示方式不同於HLOCSeriesBase。 – JeffryHouser

回答

2

如果沒有指定項目渲染器時,CandleStickSeries類默認使用一個CandleStickItemRenderer顯示每個圖表項目(從CandleStickSeries.initStyles()方法):如果你想自定義項目的外觀

csSeriesStyle.setStyle("itemRenderer", new ClassFactory(mx.charts.renderers.CandlestickItemRenderer)); 

所以CandleStickSeries,你最好的選擇是讓你的項目渲染器擴展CandleStickItemRenderer類,而不是HLOCSeriesBase