如何在Actionscript中以编程方式将函数绑定到组件?

时间:2008-11-06 23:57:21

标签: flex actionscript-3 actionscript flex3

我正在尝试以编程方式为CategoryAxis提供我自己的labelFunction,但我完全被难倒了。常规方法是在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 个答案:

答案 0 :(得分:2)

好吧,我对你的问题感到困惑,因为它对我来说绝对没问题。

我从Adobe Flex网站上获取了CategoryAxis的示例应用程序:     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"/>

并在每列的底部显示“Another String”。

如果重要的话,我正在使用Flex 3.

祝你好运, 兰迪斯蒂鲍尔

答案 1 :(得分:1)

这个问题让我很好奇,所以我去尝试了。

CategoryAxis上的labelFunction与我在这里看到的签名略有不同。对我来说,这是有效的:

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之间发生了变化,但也许这篇文章可以帮助您解决问题。

答案 2 :(得分:0)

就我而言,我认为它不会有所作为,但可能会将您的标签功能范围更改为受保护而非私有???