0

我正在编写一个 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 在其预初始化状态等待,并在它继续初始化所有子组件之前完成资​​源加载,我会喜欢它。有任何想法吗?

4

2 回答 2

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>

这显示了一般的想法,但我认为它回答了你的问题。如果在creationComplete 触发之前加载资源,则如果需要很长时间才能正确加载和处理creationComplete,则通常是等待资源的问题。

希望这可以帮助。

于 2009-06-19T00:09:42.047 回答
0

也许不要使加载依赖于远程资源。当您的资源未按时加载或根本不加载时,您的应用程序应该正常降级。

在一切都初始化之前,不要加载任何外部的东西。

于 2009-06-11T22:07:43.360 回答