无法弄清楚为什么我在Flex 4.5中遇到“访问未定义对象”错误

时间:2011-11-09 20:33:20

标签: flex actionscript

我是Flex 4.5的新手,我创建了一个类(Project.as),其中包含以下代码:

package classes
{
    public class Project
    {
        public var projectName:String;
        public var description:String;
        public var fileLoc:String;

        public function Project()
        {
            // This is the constructor  
        }

        public function SayHello() {
            import mx.controls.Alert;
            Alert.show('howdy!','Greeting');
        }
    }
}

在我的main.mxml文件中,我有以下代码:

<fx:Script>
    <![CDATA[
        import classes.Project;             
        import mx.controls.Alert;

        public var aProject:Project = new Project;
        aProject.SayHello();
    ]]>
</fx:Script>

Flex Builder正在这样说:

  

1120:访问未定义的属性aProject。

为什么告诉我这个,我该如何解决?我不明白为什么它不起作用。

1 个答案:

答案 0 :(得分:1)

这里有很多问题。

首先,我从未见过有人将import语句放在方法中。通常它们放在包和类定义之间:

package classes
{
   import mx.controls.Alert;

    public class Project
    {
        public var projectName:String;
        public var description:String;
        public var fileLoc:String;

        public function Project()
        {
            // This is the constructor  
        }

        public function SayHello() {
            Alert.show('howdy!','Greeting');
        }
    }
}

二;您编写的用于调用类实例上的方法的ActionSCript代码行应放在方法中;不是“随机的”。像这样:

<fx:Script>
    <![CDATA[
        import classes.Project;             
        import mx.controls.Alert;

        public var aProject:Project = new Project;
        protected function sayHello():void{
          aProject.SayHello();
        }
    ]]>
</fx:Script>

某种方式你会想要调用该方法。原帖子上的评论者建议使用creationComplete,这可行。但是,在MXML组件中使用creationComplete作为“构造函数样式”代码时应该谨慎。 preinitialize更好,事件将在实际构造函数运行后立即触发。如果您需要访问任何MXML子级,请将您的代码放在初始化事件处理程序中,该处理程序在createChildren()运行后立即运行。

creationComplete处理程序在组件完成初始化后立即执行;并且人们经常在creationComplete中做事,使组件再次通过它的生命周期,更新显示列表。