Flex中静态变量的初始化顺序导致bug

时间:2011-05-10 12:49:42

标签: flex flex4 static-members

我有一个由第三方开发人员为我的应用程序编写的组件,并且我正在尝试集成它,但是我发现了一个看起来像是编译器错误的错误,或者有关于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),应用程序启动时会出现错误(某些TextFields不可编辑且不包含文本),但是使用// V1而不是V2,它可以正常工作。如果我注释掉两者,那也可以正常工作(我没有得到TextField错误)。

我花了一段时间才发现导致问题的是静态const String,但是我仍然不确定为什么或者除了将DISPLAY_MODE移动到事件之外我还能做些什么呢?这就是我目前所做的,但这不是一个特别好的解决方案。)

日志中没有错误。我的BorderContainer代码中包含的顺序无关紧要。我用google搜索“as3 / flex静态初始化顺序”,但没有找到任何东西。

有谁知道问题是什么?

澄清: showInitialView()永远不会被调用。在其他bug出现之前它没有到达那里。只有V2线导致问题。

更新:我已修复了TextInput字符串未显示的问题:原来添加组件导致Tahoma字体无法显示。但是,将font-weight设置为粗体可以解决该问题,或者切换到Arial。话虽如此,原来的问题仍然存在,因为当我在没有V2的情况下运行它时,它发现Tahoma具有正常的字体权重。

1 个答案:

答案 0 :(得分:0)

这不是静态字符串。我自己测试没有问题。我对你的问题持怀疑态度,因为无论什么和变量可用,当加载应用程序时都会创建flash静态变量。

我认为这个问题与静态var无关,但是有其他原因导致错误。您的描述似乎没有Flash Player版本的调试。得到它,逐行调试您的应用程序,看看问题是什么。