Не могу понять, почему в Flex 4.5 появляется ошибка «Доступ к неопределенному объекту» - PullRequest
0 голосов
/ 10 ноября 2011

Я очень плохо знаком с 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 Ответ

1 голос
/ 10 ноября 2011

Много вопросов здесь.

Во-первых, я никогда не видел, чтобы кто-нибудь помещал операторы 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, который бы работал. Тем не менее, вы должны быть осторожны при использовании creationComplete для кода «стиль конструктора» в компоненте MXML. preinitialize лучше, и событие сработает сразу после запуска фактического конструктора. Если вам нужен доступ к любым дочерним элементам MXML, поместите свой код в обработчик события инициализации, который запускается сразу после запуска createChildren ().

обработчики creationComplete выполняются сразу после завершения инициализации компонента; и люди часто создают в creationComplete такие вещи, которые заставляют компонент снова проходить его жизненный цикл, обновляя список отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...