Как мне связать функцию с компонентом программно в Actionscript? - PullRequest
3 голосов
/ 07 ноября 2008

Я пытаюсь предоставить собственную функцию labelFunction для категории Axis программным путем, но я полностью озадачен. Обычным способом является сделать это в вашем файле 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";
    }   

}

Ответы [ 3 ]

2 голосов
/ 10 ноября 2008

Что ж, я озадачен вашей проблемой, потому что она работает абсолютно нормально для меня.

Я взял пример приложения для 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, если это имеет значение.

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

1 голос
/ 07 ноября 2008

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

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

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

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

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, но, возможно, эта статья поможет вам решить вашу проблему.

0 голосов
/ 11 ноября 2008

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

...