我正在写一个mxml组件
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" preinitialize="onPreInitialize();" "creationComplete()">
<mx:Script>
<![CDATA[
private function onPreInitialize():void
{
addEventListener( "RemoteResourceLoaded", remoteResourceLoaded );
loadARemoteResource();
}
]]>
</mx:Script>
我的组件中有一些mxml标记,用于引用远程资源中的变量。这会抛出空引用错误,因为flex会在加载远程资源之前尝试加载所有mxml组件。如果我可以在预初始化状态下进行flex等待,并在继续初始化所有子组件之前完成加载资源,我会很高兴。有什么想法吗?
答案 0 :(得分:1)
您必须以特定方式链接您的方法,您可以通过以下方式轻松完成此操作(此代码未经过测试):
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
preinitialize="onPreInitialize();"
creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
private function onPreInitialize():void {
addEventListener( "RemoteResourceLoaded", remoteResourceLoaded );
loadARemoteResource();
}
private function loadRemoteResource():void {
// ...
}
private var _created:Boolean = false;
private function onCreationComplete():void {
// whatever you have here move it to the runTheApp() method...
_created = true;
runTheApp();
}
private var _resourcesReady:Boolean = false;
private function remoteResourceLoaded(event:Event):void {
// process your resources...
_resourcesReady = true;
runTheApp();
}
// this method will be called once the app is created
// and once when your resources are loaded
//
// 1:
// if app is created before resources are loaded its body
// is not going to be executed as _resourcesReady flag is false
// when resources are loaded it will then be called again
// and the body will be executed
//
// 2:
// if the resources are loaded before the app is created
// (during debugging?) it's gonna be called once but the
// _created flag is still false so the body is not processed
// when creationComplete fires both _created is set to true
// and method is called again, both conditions are true
// and the body gets executed
private function runTheApp():void {
if ( _resourcesReady && _created ) {
// now the app is fully created and resources are loaded
}
}
]]>
</mx:Script>
</mx:Application>
这显示了一般的想法,但我认为它回答了你的问题。如果在createComplete触发之前加载资源需要花费很长时间来加载和处理creationComplete,这通常是等待资源的问题。
希望这有帮助。
答案 1 :(得分:0)
也许不要使加载依赖于远程资源。当您的资源没有按时加载或根本不加载时,您的应用程序应该会正常降级。
在初始化所有内容之前,不要加载任何外部内容。