我有一个配置 xml 文件,我需要在 flex 应用程序加载之前解析它的值。
我创建了一个静态类,允许检索 xml 配置文件中的值。
我在应用程序第一次加载时初始化这个类,但是当 xml 文件加载了一个同步加载的 Loader 类时,在实际加载 xml 文件之前,该类被要求输入值 - 所以它抛出了一个错误。
有没有办法同步加载这个 xml 文件,或者任何人都可以建议解决这个问题?我们不能将文件作为类变量嵌入,因为我们需要能够远程更改值。
我有一个配置 xml 文件,我需要在 flex 应用程序加载之前解析它的值。
我创建了一个静态类,允许检索 xml 配置文件中的值。
我在应用程序第一次加载时初始化这个类,但是当 xml 文件加载了一个同步加载的 Loader 类时,在实际加载 xml 文件之前,该类被要求输入值 - 所以它抛出了一个错误。
有没有办法同步加载这个 xml 文件,或者任何人都可以建议解决这个问题?我们不能将文件作为类变量嵌入,因为我们需要能够远程更改值。
您需要覆盖设置的初始化函数。
<?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>
如何使用状态?默认状态在 xml 加载时显示一个微调器,并且加载过程的完整事件的处理程序更改为另一个状态,该状态删除微调器并添加您的主容器。
不,您不能在 Flex 中同步加载文件。
不错的技巧,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;
}
我发现当应用程序上线时,覆盖初始化的属性并不能很好地处理。
相反,您最好使用属性 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>
回复:杰米……
createComponentsFromDescriptors();
现在是createDeferredContent();