Flash 无法设置火花按钮图标显示源。继续获取空错误引用

Flash 无法设置火花按钮图标显示源。继续获取空错误引用,flash,actionscript-3,apache-flex,flex4.5,Flash,Actionscript 3,Apache Flex,Flex4.5,有人能解释我做错了什么吗?我只是尝试使用actionscript为Flex Mobile项目中的按钮设置图标。我一直得到一个空的错误引用。但我100%肯定这不是一条坏路。在这个应用程序中,我已经多次使用相同的路径 var editCalloutBtn:CalloutButton = new CalloutButton; if(value.type=="reminder") { //this is where the null error happens e

有人能解释我做错了什么吗?我只是尝试使用actionscript为Flex Mobile项目中的按钮设置图标。我一直得到一个空的错误引用。但我100%肯定这不是一条坏路。在这个应用程序中,我已经多次使用相同的路径

var editCalloutBtn:CalloutButton = new CalloutButton;
if(value.type=="reminder")
{
            //this is where the null error happens
        editCalloutBtn.iconDisplay.source="assets/images/reminderIcon_45.png";

}else
{
        editCalloutBtn.iconDisplay.source="assets/images/deadlineIcon_45.png";
}
callout_group.addElement(editCalloutBtn);
为了进行测试,我在mxml中使用相同的路径设置图标,它可以正常工作。所以这不是路径。但是我需要用actionscript来实现这一点,这样我就可以动态地设置值


有什么想法吗?

Flex组件是以懒散的方式创建的。这意味着任何子组件只有在实际需要时才会创建。只要一个组件没有被添加到显示列表中,你就可以确定它的子组件是不需要的(如果你想了解更多,你可以在谷歌上搜索“Flex组件生命周期”)

更具体地说明您的情况

在Callout按钮添加到displaylist之前,您尝试访问“iconDisplay”,因此“iconDisplay”属性为“null”

解决方案

我不太清楚您为什么要在ActionScript中执行此操作,但这里有一个解决方案:您必须侦听
FlexEvent.CREATION\u COMPLETE
。当Callout按钮触发该事件时,您将确定其“iconDisplay”子组件不再为“null”

var editCalloutBtn:CalloutButton = new CalloutButton();
editCalloutBtn.addEventListener(
    FlexEvent.CREATION_COMPLETE, onCalloutButtonReady);
callout_group.addElement(editCalloutBtn);

private function onCalloutButtonReady(event:FlexEvent):void {
    //remove the event listener: we no longer need it
    editCalloutBtn.removeEventListener(    
        FlexEvent.CREATION_COMPLETE, onCalloutButtonReady);

    //no longer null
    trace(editCalloutBtn.iconDisplay); 
}

这可能会有例外(例如,当使用状态时,或者使用没有“iconDisplay”元素的皮肤时),但我不想为此打扰您,因为它们不应该在这里发生。

您确定
iconDisplay
是正确的属性吗?在这里找不到:它出现在代码提示中。我想不出还会是什么。如果你只能用mxml设置一次图标,那就有点傻了。我有一个问题,我在mxml中设置了iconDisplay属性,但是图标实际上没有显示出来。我使用扩展spark.ButtonSkin类的自定义皮肤。你能告诉我问题出在哪里吗?