apache-flex 在应用程序启动/初始化之前在Flex中加载xml文件

y3bcpkx1  于 2022-11-01  发布在  Apache
关注(0)|答案(5)|浏览(165)

我有一个配置xml文件,我需要在Flex应用程序加载之前解析该文件的值。
我已经创建了一个静态类,它允许检索xml配置文件中的值。
当应用程序第一次加载时,我初始化了这个类,但是由于xml文件是用一个Loader类加载的,这个Loader类同步加载了一个,所以在xml文件实际加载之前,类被要求提供值-所以它抛出了一个错误。
有没有方法可以同步加载这个xml文件或者有没有人可以建议一个解决方法?我们不能将这个文件作为类变量嵌入,因为我们需要能够远程更改这些值。

8ftvxx2r

8ftvxx2r1#

您将需要覆盖set initialized函数。

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

        <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>
hfwmuf9z

hfwmuf9z2#

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

gk7wooem

gk7wooem3#

很好的技巧,Quoo,但是...必须处理XML文件在框架调用initialized = true之前已经加载的情况。
大概是这样的:私有var _fileLoaded:布尔值=false;
参数值为false;
私有函数xmlCompleteHandler(事件:事件):void
//处理xml
_fileLoaded =真;
=_文件已加载并已初始化;
}
覆盖已初始化的公共函数集(值:布尔值):void{
_initialized =值;
=_文件已加载并已初始化;
}

8yparm6h

8yparm6h4#

我发现,当应用程序联机时,重写initialized属性不能很好地处理。
相反,您最好使用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>
bqf10yzr

bqf10yzr5#

回复:Jami ... createComponentsFromDescriptors();现在是createDeferredContent();

相关问题