Как использовать внешние классы ActionScript во FlashBuilder (думал, я знал)

Я пытаюсь внедрить CSVLib в приложение Air и получаю сообщение об ошибке, которое кажется мне совершенно нелогичным.

"1120: Доступ к неопределенному свойству csv." и "1120: доступ к неопределенному свойству completeHandler."

Единственное, что я могу подумать, это то, что он неправильно импортирует класс csv, или сам класс как-то сломан? Я знаю, что мой путь импорта правильный, потому что я набрал его напрямую, основываясь на автоматических подсказках. Приведенный ниже код скопирован непосредственно из практического руководства на сайте csv lib.

Или вам нужно что-то особенное, чтобы внешние классы ActionScript работали во Flashbuilder?

    <fx:Script>
        <![CDATA[
            import com.shortybmc.*;
            import com.shortybmc.data.parser.CSV;

            var csv:CSV = new CSV();
            csv.addEventListener (Event.COMPLETE, completeHandler);
            csv.load (new URLRequest('example-2.csv'));
            function completeHandler (event: Event)
            {
                trace ( csv.data.join('\r') );
                // do something ...
            }
        ]]>
    </fx:Script>

1 ответ

Решение

В этом случае проблема где-то еще. fx:Script тег находится в файле MXML, который представляет определение класса.

Ваша ошибка происходит, потому что у вас есть код в определении класса (т.е. вне метода). Вы можете написать это вместо этого, например:

<fx:Script>
    <![CDATA[
        import com.shortybmc.*;
        import com.shortybmc.data.parser.CSV;

        private var csv:CSV;
        private function init ():void
        {
            csv = new CSV();
            csv.addEventListener (Event.COMPLETE, completeHandler);
            csv.load (new URLRequest('example-2.csv'));
        }

        private function completeHandler (event: Event):void
        {
            trace ( csv.data.join('\r') );
            // do something ...
        }
    ]]>
</fx:Script>

Тогда вам нужно убедиться, что init метод на самом деле вызывается; Вы можете сделать это в полном обработчике вашего объекта MXML.

Другие вопросы по тегам