Re: [問題] FLEX 的 MXML 回pikoto
※ 引述《pikoto (被妳鎮壓了>//////<)》之銘言:
: 借標題一問:
: Flex的 SWFLoder,載入由flash cs3做的a.swf
: 可以寫在flex中直接來控制a.swf中的class嗎?
: 用SWFLoader.content嗎?還是用SWFLoader.data.但一直都是null.
: 謝謝.
: 處理資料用flex實在太方便了。
: ※ 引述《Jerrynet (我愛Hot_game板)》之銘言:
: : //也可以作別的處理,例如你要顯示某網頁在別的HTML component裡
: : }
: : 以上為簡略程式,你還要把HTMLLoader指定到你的HTML component的HTMLLoader屬性,
: : 網頁才會顯示出來~@@
可以,這牽涉到stage,parent和root的關係
首先,單純由flash產生的swf檔案階層關係如下:
SWF -> Stage -> MainTimeLine -> Stage(Stage可以有很多個子Stage)
直接在Flash畫布上拉出的元件,和function,都在
SWF -> Stage -> MainTimeLine -> 元件/方程式
由Flex產生的swf:(以Adobe AIR 為例)
SWF --> Stage --> SystemManager --> WindowedApplication -->
mx元件或方程式
你可以試試看trace(this), trace(this.parent), trace(this.parent.parent), .....
來看這關係,
有趣的是,通常MainTimeLine有name屬性,叫做"root1", 我目前還沒發現有root2 ~XD
以你的例子來說, 如果你載入的SWF是由Flex產生的,則Help Content有說明如何控制和通
訊,在:
Help Content >
Adobe Flex 3 Help >
Controls >
SWFLoader Control
裡有寫如何用SystemManager Class 來控制
此外,用LocalConnection也可以和所載入的SWF作溝通,但這部份我不熟所以不講了.
重點來了,如果你是用Flash產生的swf載入,以上方法都太麻煩的話,有硬幹的方法:
首先先了解階層關係:
.content
SWFLoader ----------> MainTimeLine(所載入swf的)
了解後,假設你把一個function寫在場景第一格,ex:
funciton test(t:String):void(){
trace("你傳入的字串是: "+t);
}
你要怎麼從Flex呼叫此函數呢?
如果你直接用:
SWFLoader.content.test("哈哈");
會傳回錯誤,因為在編譯階段,SWFLoader.content是靜態參考,也就是根本沒有test這屬性
所以該怎麼作呢?以下
在Flex裡,ex:
<mx:Button x="431" y="128" label="按我送訊息到swf" click="send('哈哈');"/>
<mx:SWFLoader id="swf" source="test.swf" autoLoad="true" />
<mx:Script>
<![CDATA[
private function send(t:String):void{
Object(swf.content).test(t);
}
]]>
</mx:Script>
因為Object不是靜態參考,所以編譯時不會出現錯誤,且Object可以是任何物件,因此用
Object轉換型別,這樣就可以了.
那會有人問說怎麼不用MainTimeLine來轉換type呢? 因為沒有這物件阿XD
以上是我去年弄好久才了解的心得,請大家參考.....orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.70.112.43
→
03/30 01:33, , 1F
03/30 01:33, 1F
→
03/30 01:34, , 2F
03/30 01:34, 2F
推
03/30 02:12, , 3F
03/30 02:12, 3F
→
03/30 02:32, , 4F
03/30 02:32, 4F
→
03/30 02:33, , 5F
03/30 02:33, 5F
→
03/30 02:33, , 6F
03/30 02:33, 6F