我有一个配置xml文件,我需要在flex应用程序运行之前解析值。
我创建了一个静态类,允许检索xml配置文件中的值。
当应用程序第一次加载时,我正在初始化此类,但是当xml文件加载了一个Loader类,该类同步加载该类,在实际加载xml文件之前,该类被要求输入值 - 因此它会引发错误
有没有办法同步加载这个xml文件,还是有人可以建议解决这个问题?我们无法将文件作为类变量嵌入,因为我们需要能够远程更改值。
答案 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();