3

我有一个配置 xml 文件,我需要在 flex 应用程序加载之前解析它的值。

我创建了一个静态类,允许检索 xml 配置文件中的值。

我在应用程序第一次加载时初始化这个类,但是当 xml 文件加载了一个同步加载的 Loader 类时,在实际加载 xml 文件之前,该类被要求输入值 - 所以它抛出了一个错误。

有没有办法同步加载这个 xml 文件,或者任何人都可以建议解决这个问题?我们不能将文件作为类变量嵌入,因为我们需要能够远程更改值。

4

5 回答 5

7

您需要覆盖设置的初始化函数。

   <?xml version=”1.0″ encoding=”utf-8″?>
    <mx:Application
        xmlns:mx=”http://www.adobe.com/2006/mxml”
        preinitialize=”preInitHandler(event)”&gt;

        <mx:Script>
            <![CDATA[

                private function preInitHandler (event : Event) : void
                {
                   //load the xml, add the xmlCompleteHandler as a listener
                }

                private function xmlCompleteHandler (event : Event) : void
                {
                    //handle the xml
                    super.initialized = true;
                }

                override public function set initialized (value : Boolean) :
                    void
                {
                    // don't do anything, so we wait until the xml loads
                }

            ]]>
        </mx:Script>

    </mx:Application>
于 2009-07-22T12:04:20.903 回答
0

如何使用状态?默认状态在 xml 加载时显示一个微调器,并且加载过程的完整事件的处理程序更改为另一个状态,该状态删除微调器并添加您的主容器。

不,您不能在 Flex 中同步加载文件。

于 2009-07-22T11:55:36.430 回答
0

不错的技巧,Quoo,但是...必须处理在框架调用 initialized = true 之前已加载 XML 文件的情况。

像这样的东西: private var _fileLoaded:Boolean =false;
私有 var _initialized:Boolean =false;

private function xmlCompleteHandler (event :Event) :void
//处理xml
_fileLoaded = true;
super.initialized =_fileLoaded && _initialized;
}
覆盖初始化的公共函数集(值:布尔值):void{
_initialized = value;
super.initialized =_fileLoaded && _initialized;

}

于 2009-09-08T06:50:10.720 回答
0

我发现当应用程序上线时,覆盖初始化的属性并不能很好地处理。

相反,您最好使用属性 creationPolicy。当设置为“none”时,此属性会暂停容器的子创建,直到调用方法 createComponentsFromDescriptors。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                layout="absolute"
                preinitialize="{loadStuff();}"
                creationPolicy="none">

<mx:Script>
    <![CDATA[

        private function loadStuff():void {
            // Load your stuff here
        }

        private function loadStuffHandler(event:Event):void {
            // This should be called when loading (from loadStuff method) finishes
            createComponentsFromDescriptors();
        }

    ]]>
</mx:Script>

</mx:Application>
于 2009-11-17T07:06:12.120 回答
0

回复:杰米…… createComponentsFromDescriptors();现在是createDeferredContent();

于 2010-07-28T15:21:29.963 回答