Come associare una funzione a un componente a livello di codice in Actionscript?
-
06-07-2019 - |
Domanda
Sto provando a fornire la mia etichettaFunction per un CategoryAxis a livello di codice ma sono completamente sconcertato. Il modo normale è farlo nel tuo file MXML, ma voglio farlo nel mio file Actionscript.
Il modo normale di farlo è:
<mx:Script>
<![CDATA[
private function categoryAxis_labelFunc(item:Object,
prevValue:Object,
axis:CategoryAxis,
categoryItem:Object):String {
return "Some String";
}
]]>
</mx:Script>
<mx:CategoryAxis labelFunction="categoryAxis_labelFunc" />
Ma voglio ottenere la stessa cosa nella mia sottoclasse di CategoryAxis, qualcosa del tipo:
public class FauxDateAxis extends CategoryAxis {
public function FauxDateAxis() {
super();
labelFunction = categoryAxis_labelFunc // Doesn't work of course.
}
private function categoryAxis_labelFunc(item:Object,
prevValue:Object,
axis:CategoryAxis,
categoryItem:Object):String {
return "Another String";
}
}
Soluzione
Beh, sono sconcertato dal tuo problema, perché funziona perfettamente per me.
Ho preso l'applicazione di esempio per CategoryAxis dal sito di Adobe Flex: http: //livedocs.adobe.com/flex/3/langref/index.html?mx/charts/CategoryAxis.html&mx/charts/class-list.html , ha aggiunto il tuo codice alla lettera (anche tranne per l'aggiunta del pacchetto e importare statments), e ha funzionato proprio come lo desideri tu.
Nell'esempio ho modificato la riga
<mx:CategoryAxis id="haxis" categoryField="Date" title="Date"/>
da leggere
<local:FauxDateAxis id="haxis" categoryField="Date" title="Date"/>
e mostrava " Un'altra stringa " alla base di ogni colonna.
Sto usando Flex 3, se è importante.
Buona fortuna, Randy Stegbauer
Altri suggerimenti
Questa domanda mi ha incuriosito, quindi sono uscito e l'ho provato.
L'etichetta Funzione su CategoryAxis ha una firma leggermente diversa da quella che vedo qui. Per me, questo è ciò che funziona:
function(item:Object, field:String, index:int, pct:Number)
Non sono un mago dei grafici Flex, quindi forse sai qualcosa che io non so, ma quando uso quella firma in questa faccenda,
public function FauxDateAxis() {
super();
labelFunction = function(item:Object, field:String, index:int, pct:Number) {
return "string";
}
}
Funziona per me in Flex 3 Pro.
Vedo che l'esempio di codice che hai fornito assomiglia molto a http://blog.flexexamples.com/2007/11/16/creating-a-custom-label-function-on-a-flex- linechart-controls-category-axis / (ho provato a vedere se riuscivo a trovare un esempio della firma che hai fornito). Vedo che anche altre persone usano questa firma.
Questa non è una gran risposta; Non ricordo che questa parte dell'API dei grafici cambi tra Flex 2 e Flex 3, ma forse questo post ti aiuta a risolvere il tuo problema.
Solo che non penso che farà la differenza, ma forse cambierete l'ambito della funzione dell'etichetta in protetto piuttosto che privato ???