Порядок инициализации статических переменных во Flex, вызывающий ошибку - PullRequest
0 голосов
/ 10 мая 2011

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

В основном, у меня есть это:

public class ModeChangeController {
    public static const DISPLAY_MODE:String = "DisplayMode";

}


public class Events {       
    public static const DISPLAY_MODE:String = "DisplayMode";

    public static function myStaticFunction( viewState:String = null):void {
        //Empty
    }
}



<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer /*snip*/ >

    <fx:Script><![CDATA[
        import mypackage.sub1.ModeChangeController;
        import mypackage.sub2.Events;

        private function showInitialView():void {
            // Variant 1
            Events.myStaticFunction( Events.DISPLAY_MODE);

            // Variant 2
            Events.myStaticFunction( ModeChangeController.DISPLAY_MODE);
        }
    ]]></fx:Script>
}    

Если я использую // V2 (т.е. комментируем V1), при запуске приложения возникает ошибка (некоторые текстовые поля не редактируются и не содержат текста), но с // V1, а не с V2, он работает нормально. Если я закомментирую оба, это также работает нормально (я не получаю ошибку TextField).

Мне потребовалось некоторое время, чтобы выяснить, что именно эта статическая константная строка вызывала проблему, но я все еще не уверен, почему или если я могу что-то сделать с этим, кроме простого перемещения DISPLAY_MODE в Events ( что я и сделал на данный момент, но это не очень хорошее решение).

В журнале нет ошибок. Порядок включений в моем коде BorderContainer не имеет значения. Я погуглил «статический порядок инициализации as3 / flex», но ничего не нашел.

Кто-нибудь знает, в чем проблема?

Уточнение: showInitialView () никогда не вызывается . Он не попадет туда, пока не появится другая ошибка. Просто наличие линии V2 вызывает проблему.

Обновление: Я исправил проблему с тем, что строки TextInput не отображаются. Оказывается, добавление компонента привело к тому, что шрифт Tahoma не появился. Тем не менее, установка жирности шрифта для решения проблемы жирным шрифтом или переключение на Arial. С учетом сказанного, исходный вопрос все еще стоит , потому что когда я запустил его без V2, он обнаружил Tahoma с нормальным весом шрифта.

1 Ответ

0 голосов
/ 10 мая 2011

Это не статическая строка.Я сам проверил это без проблем.Я скептически отнесся к вашей проблеме, поскольку флэш-статические переменные будут создаваться при загрузке приложения, независимо от того, что и какая переменная будет доступна.

Я полагаю, что проблема не имеет ничего общего со статической переменной var, а с чем-то другим, вызывающим ошибку.Похоже, у вас нет версии отладчика Flash Player по вашему описанию.Получите это, отладьте ваше приложение построчно и посмотрите, в чем проблема.

...