2011-08-16 52 views
0

我的應用程序有幾個模塊,因此在我的應用程序中加載。加載模塊與進度條

<local:moduleloader url="Module1.swf" id="modulel" /> 
<local:moduleloader url="Module2.swf" id="module2" /> 

然後,當加載每個模塊時,我顯示進度條。進度條顯示但不會消失。它仍然在應用程序的整個框架之上。該模塊加載程序如下:

(另請注意,在Flex 3的相同的作品,但使用Flex 4日上午和外匯4不)

<mx: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" 
        xmlns="*" 
        creationComplete="initTheModuleLoader()"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.core.Application; 
      import mx.core.FlexGlobals;  

      private var ParentApp:* = FlexGlobals.topLevelApplication; 
      private var standin:DisplayObject; 

      private function initTheModuleLoader():void { 
       addEventListener("loading", onLoading); 
       addEventListener("progress", onProgress); 
       addEventListener("setup", onSetup); 
       addEventListener("ready", onReady); 
       addEventListener("error", onError); 
       standin = panel; 
      } 

      private function onUrlChanged(event:Event):void { 
       if (url == null) { 
        if (contains(standin)) 
         removeChild(standin); 
       } else { 
        if (!contains(standin)) 
         addChild(standin); 
       } 
       progress.indeterminate=true; 
      } 

      import mx.controls.Alert; 
      private function onLoading(event:Event):void { 
       //progress.label=languageXml.lastResult.progress.progressonLoading +' ' + url;//Loading module 
       progress.label = "Loading module" + ' ' + url;//Loading module 
       if (!contains(standin)) 
        addChild(standin); 
       progress.indeterminate=true; 
      } 

      private function onProgress(event:Event):void {   
       //progress.label=languageXml.lastResult.progress.progressonProgress;   //Loaded %3%%... 
       progress.label = "Loaded %3%%...";   //Loaded %3%%... 
       progress.indeterminate=false; 
      } 

      private function onSetup(event:Event):void { 
       //progress.label=String(languageXml.lastResult.progress.progressonSetup).replace('###',url) 
       progress.label = "on SetUp"; 
       progress.indeterminate=false; 
      } 

      private function onReady(event:Event):void { 
       //progress.label= String(languageXml.lastResult.progress.progressonReady).replace('###',url); 
       progress.label = "onReady"; 
       if (contains(standin)) 
        removeChild(standin); 
      } 

      private function onError(event:Event):void { 
       //progress.label=languageXml.lastResult.progress.progressonError + " " + url; 
       progress.label = "Error"; 
      } 

      private function onUnload(event:Event):void { 
       if (url == null) { 
        if (contains(standin)) 
         removeChild(standin); 
       } else { 
        if (!contains(standin)) 
         addChild(standin); 
       } 
       progress.indeterminate=true; 
       progress.label="Module " + url + " was unloaded!"; 
      } 
     ]]> 

    </fx:Script> 

    <mx:Panel id="panel" width="100%" borderStyle="none" > 
     <mx:ProgressBar width="100%" id="progress" source="{this}" /> 
    </mx:Panel> 

</mx:ModuleLoader> 

任何人都可以幫助這個嗎?

+0

如果您已經使用了Flex 4,是否有原因不能升級到4.5並使用新的模塊/模塊加載器? –

+0

其實我剛剛從Flex 3升級到Flex 4.所以現在我不得不堅持Flex 4。 – FlexyBoz

+0

如果您已經從3升級到4,則4到4.5將不會成爲問題。 –

回答

0

我明白了。

首先在Flex 3中將InitModuleLoader函數放入creationComplete中,但在Flex 4中,此方法必須在initialize中指定。

其次,不Flex 4中(它在Flex 3的)表演,所以我換成MX:通過MX面板:HBox中或S:

集團

這就是所有和它的工作。

但是,正如J_A_X上面建議的那樣,它最好使用Fx 4.5,因爲它有一個新的moduleLoader,它可以換膚,這可能會使它非常酷。

+0

你能否澄清一下本來應該做些什麼之後「所以我換成了」或者「因此可以理解你所做的事情,然後將這個答案標記爲正確的,以便其他人可以從中學習? –

+0

@Amy Blankenship我編輯了答案......現在好了。 – FlexyBoz

0

您的onReady處理程序刪除了替換,而不是進度條。

+0

但ProgressBar是在替代(面板),它應該從邏輯上刪除ProgressBar。儘管如此,我試圖做removeChild(進度)。問題依然存在。 – FlexyBoz

+0

進度實際上是面板。嘗試刪除或更改其可見性。 –

+0

你的意思是改變面板的可見性?我試了一下,沒有太多的希望。或者你的意思是我需要完全移除面板並且只有進度條? – FlexyBoz