星期三, 3月 03, 2010

用loader 讀取 Flex swf

因為flex做出來的swf架構和flash做出來的有點不一樣
最近用loader的時候就卡了好久 囧

後來發現只用
private function startForm(e:CloseEvent = null):void
{
    this.initStage("form");
    this.currentState = this.formState.name;
    this.form.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void {
       form.contentLoaderInfo.sharedEvents.dispatchEvent(new Event("startForm"));
    });
   
}


form裡面是接不到startForm這個事件的
因為Flex有兩個Frame,第一個Frame只有systemManager,第二個Frame才有元件
而Event.COMPLETE的時候,完成的就只有systemManager,這時的loader.content就是systemManager

所以只有當systemManager送出FlexEvent.APPLICATION_COMPLETE的時,元件才算完全被載入
這時的loader.systemManager才會變成主程式

所以修改成這樣:
private function startForm(e:CloseEvent = null):void
{
    this.initStage("form");
    this.currentState = this.formState.name;
    this.form.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void {
        form.content.addEventListener(FlexEvent.APPLICATION_COMPLETE, function (e:FlexEvent):void {
            form.contentLoaderInfo.sharedEvents.dispatchEvent(new Event("startForm"));
        });
    });
   
}



相關資料
一種Flex和as3代碼之間互相調用的方法
瞭解Flex程序的生命週期

沒有留言:

張貼留言