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

时间:2009-07-22 10:07:46

标签: xml flex flash actionscript-3 e4x

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

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

当应用程序第一次加载时,我正在初始化此类,但是当xml文件加载了一个Loader类,该类同步加载该类,在实际加载xml文件之前,该类被要求输入值 - 因此它会引发错误

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

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:0)

使用状态怎么样?加载xml时,默认状态显示一个微调器,加载过程的complete事件的处理程序更改为另一个删除微调器并添加主容器的状态。

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

答案 2 :(得分:0)

好戏,Quoo,但...... 必须处理在框架调用之前加载XML文件的情况 initialized = true。

这样的事情: private var _fileLoaded:Boolean = false;
private var _initialized:Boolean = false;

私有函数xmlCompleteHandler(event:Event):void
//处理xml
_fileLoaded = true;
super.initialized = _fileLoaded&amp;&amp; _initialized;
}
override public set set initialized(value:Boolean):void {
_initialized = value;
super.initialized = _fileLoaded&amp;&amp; _initialized;

}

答案 3 :(得分: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>

答案 4 :(得分:0)

re:Jami ...... createComponentsFromDescriptors();现在是createDeferredContent();