0

モジュールを Flex アプリケーションにロードするときに進行状況バーを追加したいと考えています。したがって、次のようにモジュールローダーを作成しました。しかし、アプリケーションでそれを使用してモジュールをロードする方法がわかりません。誰でもこれで私を助けてくれますか?MYコードは以下の通りです。私のメイン アプリケーションには、次の 2 つのモジュールを含むビュースタックがあります。Module1 はログイン フォームであり、ログイン フォームで [OK] をクリックすると、Module1 をロードする必要があることに注意してください。

<mx:ViewStack id="mainstack" width="100%" height="100%">

        <mx:HBox id="Mod1Loader" width="100%" height="100%" label="Mod1Loader" horizontalAlign="center" verticalAlign="middle">
            <mx:ModuleLoader url="Mod1.swf" id="Module1" />
        </mx:HBox>

        <mx:HBox id="Mod2Loader" width="100%" height="100%" label="Mod2Loader" horizontalAlign="center" verticalAlign="middle">
            <mx:ModuleLoader url="Mod2.swf" id="Module2" width="100%" height="100%"/>
        </mx:HBox>

    </mx:ViewStack>

CustomModuleLoader.mxml は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<s:ModuleLoader xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx"
                width="400" height="300"
                creationComplete="init()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import mx.core.UIComponent;

            public var standin:UIComponent;

            public function init():void {
                addEventListener("urlChanged", onUrlChanged);
                addEventListener("loading", onLoading);
                addEventListener("progress", onProgress);
                addEventListener("setup", onSetup);
                addEventListener("ready", onReady);
                addEventListener("error", onError);
                addEventListener("unload", onUnload);

                standin = panel;
                removeElement(standin);        
            }

            public function onUrlChanged(event:Event):void {
                if (url == null) {
                    if (contains(standin))
                        removeElement(standin);
                } else {
                    if (!contains(standin))
                        addElement(standin);
                }
                progress.indeterminate=true;
            }

            public function onLoading(event:Event):void {
                progress.label="Loading module " + url;
                if (!contains(standin))
                    addElement(standin);

                progress.indeterminate=true;
            }

            public function onProgress(event:Event):void {
                progress.label="Loaded %1 of %2 bytes...";
                progress.indeterminate=false;
            }

            public function onSetup(event:Event):void {
                progress.label="Module " + url + " initialized!";
                progress.indeterminate=false;
            }

            public function onReady(event:Event):void {
                progress.label="Module " + url + " successfully loaded!";

                if (contains(standin))
                    removeElement(standin);
            }

            public function onError(event:Event):void {
                progress.label="Error loading module " + url;
            }

            public function onUnload(event:Event):void {
                if (url == null) {
                    if (contains(standin))
                        removeElement(standin);
                } else {
                    if (!contains(standin))
                        addElement(standin);
                }
                progress.indeterminate=true;
                progress.label="Module " + url + " was unloaded!";
            }
        ]]>
    </fx:Script>

    <s:Panel id="panel" width="100%" title="Status of Operations">
        <s:layout>
            <s:VerticalLayout/>
        </s:layout>
        <mx:ProgressBar width="100%" id="progress" source="{this}"/>
    </s:Panel>
</s:ModuleLoader>

あなたの貴重な助けが必要です。

どうもありがとう。

4

1 に答える 1

0

ドキュメントに書かれているように、モジュールの読み込みを進行状況バーに直接バインドできます: http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7d8c.html#WS2db454920e96a9e51e63e3d11c0bf63b33-7f97

sourceプログレスバーの をモジュールローダーに設定し、 を定義する必要がありますlabelmodeを poll に設定すると、すべてが自動的に機能するはずです。

-- 編集 実際、ModuleLoader にはこれらの属性がないため、いくつかの理由で、Adobe のドキュメントは同期していません。

簡単な解決策は、必要な属性を追加することです。

        [Bindable]
        public var bytesLoaded:Number = 0;

        [Bindable]
        public var bytesTotal:Number = 100;

次に、 onProgress 関数を変更して属性を更新します。

        public function onProgress(event:ProgressEvent):void {
                            // update the attributes
            bytesLoaded = event.bytesLoaded;
            bytesTotal = event.bytesTotal;

            progress.label="Loaded %1 of %2 bytes...";
            progress.indeterminate=false;
        }

ローカル環境でテストしているため、進行状況バーは表示されませんが、少なくとも問題はありません。

M.

于 2012-07-12T07:24:54.350 に答える