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++程序員,我無法理解這裏會出現什麼問題 - 所有實例都在做什麼基類?
也許有一些關於繼承的特定語言的概念?
向我們展示如何使用渲染器。 – JeffryHouser
@ Reboog711你的意思是MXML屬性賦值?我更新了我的問題 – Ulterior
是的,我想這就是我的意思。通常在指定一個類時使用完全限定的路徑名;然而,因爲你沒有得到一個編譯器錯誤,可能不是問題。審覈您的渲染器代碼;我不清楚爲什麼你的CycleColorRenderer的顯示方式不同於HLOCSeriesBase。 – JeffryHouser