Как программно привязать функцию к компоненту в ActionScript?

Я пытаюсь программно предоставить свою собственную функцию labelFunction для CategoryAxis, но полностью сбит с толку. Обычный способ - сделать это в вашем файле MXML, но я хочу сделать это в моем файле ActionScript.

Обычный способ сделать это:

<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" />

Но я хочу добиться того же в своем подклассе CategoryAxis, например:

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";
    }   

}

person Hates_    schedule 06.11.2008    source источник


Ответы (3)


Что ж, меня озадачивает ваша проблема, потому что она мне подходит.

Я взял пример приложения для CategoryAxis с сайта Adobe Flex: http://livedocs.adobe.com/flex/3/langref/index.html?mx/charts/CategoryAxis.html&mx/charts/class-list.html , добавил ваш код дословно (ну, за исключением добавления пакетов и статусов импорта), и он работал так, как вы этого хотите.

В этом примере я изменил строку

<mx:CategoryAxis id="haxis" categoryField="Date" title="Date"/>

читать

<local:FauxDateAxis id="haxis" categoryField="Date" title="Date"/>

и он отображал «Другая строка» в основании каждого столбца.

Я использую Flex 3, если это важно.

Удачи, Рэнди Стегбауэр

person Randy Stegbauer    schedule 10.11.2008

Этот вопрос вызвал у меня любопытство, поэтому я пошел и попробовал.

LabelFunction в CategoryAxis имеет немного другую сигнатуру, чем то, что я вижу здесь. Для меня это то, что работает:

function(item:Object, field:String, index:int, pct:Number)

Я не мастер гибких диаграмм, поэтому, возможно, вы знаете кое-что, чего я не знаю, но когда я использую эту подпись в этом вопросе,

public function FauxDateAxis() {
    super();
    labelFunction = function(item:Object, field:String, index:int, pct:Number) {
       return "string";
    }
}

У меня работает в Flex 3 Pro.

Я вижу, что предоставленный вами образец кода очень похож на http://blog.flexexamples.com/2007/11/16/creating-a-custom-label-function-on-a-flex-linechart-controls-category-axis/ (я попытался найти пример предоставленной вами подписи). Я вижу, что другие люди тоже используют эту подпись.

Это не лучший ответ; Я не помню, чтобы эта часть API диаграмм менялась между Flex 2 и Flex 3, но, возможно, этот пост поможет вам в решении вашей проблемы.

person Mitch Haile    schedule 07.11.2008
comment
Показанная подпись - это именно то, что указано в документации CategoryAxis liveocs.adobe.com/flex/3/langref/index.html?mx/charts/. Рэнди Стегбауэр - person Randy Stegbauer; 10.11.2008

Просто я, хотя, я не думаю, что это будет иметь значение, но, возможно, измените область действия вашей метки на защищенную, а не на частную ???

person Matt MacLean    schedule 11.11.2008