Как лучше всего включать внешние файлы ActionScript в гибкое приложение? - PullRequest
1 голос
/ 21 февраля 2009

Если я включаю внешний файл actionscript в файл flex mxml, я получаю различные варианты поведения во время компиляции в зависимости от используемого метода. Использование тега mx script с атрибутом источника или оператором включения, а затем компиляция файла приводит к ошибкам типа:

Ошибка: пакеты не могут быть вложенными.

Если использовать import, эти ошибки исчезают и файл компилируется, но у меня возникают проблемы при попытке создать экземпляр класса.

    import lib.journal;
    public var testing:journal = new journal();
    testing.init();

, что дает:

Ошибка: доступ к неопределенному тестированию свойств.

Кто-нибудь может объяснить, что здесь происходит? Какой эффект имеет включение файла в отличие от его импорта на пакеты и область действия?

спасибо,

Ответы [ 3 ]

4 голосов
/ 21 февраля 2009

Чтобы ответить на более общий вопрос: импорт является предпочтительным способом включения внешних файлов. По моему мнению, оператор include следует использовать только тогда, когда больше ничего не будет делать, поскольку он несколько усложняет отладку, если что-то идет не так и делает код обычно более трудным для чтения и понимания. Описание Ассафом того, что import и include делают правильно.

И затем для более конкретной проблемы, которую вы, похоже, имеете: вы, вероятно, пытаетесь testing.init(); прямо в блоке <script> - попробуйте поместить его в метод. У вас должны быть только такие вещи, как import операторы и объявления членов (переменные, функции) непосредственно в блоке скрипта и подобные операторы в функциях.

Вы видите это сообщение об ошибке, потому что, когда вы вызываете метод init() этого объекта, он еще не был создан - этот оператор будет выполнен, когда определено определение класса, который представляет ваш файл MXML. загружен; вам нужно, чтобы он выполнялся, когда был создан конкретный экземпляр этого класса, и вы можете сделать это, вызвав его в конструкторе класса (насколько я знаю, это невозможно при написании класс, использующий MXML, так что читайте дальше :) или, например, в функции-обработчике для события FlexEvent.CREATION_COMPLETE (или creationComplete в терминах атрибутов тега MXML) (см. пример ниже.)

Попробуйте что-то вроде этого:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    width="800" height="600"
    creationComplete="creationCompleteHandler();"
>
    <mx:Script>
        <![CDATA[

        import lib.Journal;

        public var testing:Journal = new Journal();

        private function creationCompleteHandler():void
        {
            testing.init();
        }

        ]]>
    </mx:Script>

</mx:Application>
2 голосов
/ 21 февраля 2009

Импорт позволяет получить доступ к публичным объявлениям импортируемого файла.

Включает растения содержимое файла as3 в местоположение включения , как если бы вы его там набрали .

См. Руководство " Сравнение, в том числе и импорт кода ActionScript ".

0 голосов
/ 22 июля 2009

Попробуйте это:

<mx:Script>
    <![CDATA[

    import lib.Journal;

    public var testing:Journal;

    private function creationCompleteHandler():void
    {
        testing = new Journal();
    }

    ]]>
</mx:Script>

Ура, Dirk

...