0

我正在学习 flex,但我无法理解动作脚本覆盖的原理——分配自定义处理程序并调用该类的 super 不会产生与我从正常继承机制中怀疑的相同结果。

例如 - 图表系列具有属性 ItemRenderer - 用鼠标指向会给出?继承的基类?在我的情况下 -

mx.charts.chartClasses.HLOCSeriesBase.itemRenderer

flex help 给出了这个:

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 应用程序渲染重新分配:

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

它编译好,但运行它我看到一个空列表,作为 C 和一些 C++ 程序员,我无法理解这里可能出现的问题 - 所有实例都在做基类会做的事情?

也许有某种关于继承的语言特定概念?

4

1 回答 1

2

如果未指定项目渲染器,则CandleStickSeries该类默认使用 aCandleStickItemRenderer来显示每个图表项目(来自CandleStickSeries.initStyles()方法):

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

因此,如果您希望为 a 自定义项目的外观CandleStickSeries,最好的办法是让您的项目渲染器扩展CandleStickItemRenderer类,而不是HLOCSeriesBase.

于 2013-06-25T21:26:19.850 回答