2013-06-25 139 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