flex與js通信與彼此之間的互調(diào)整理(一)
由于這個(gè)迭代上面下發(fā)的任務(wù)中有一條:需要使用flex調(diào)用js來(lái)操控用ajax做的三維球,任務(wù)落在了我的身上,我也就才開(kāi)始學(xué)習(xí)flex,以前用flash做過(guò)游戲,所以很快過(guò)了一遍語(yǔ)法就行了,開(kāi)始網(wǎng)上查找flex和js之間互相調(diào)用的范例,這里整理一下也避免忘記,也和大家互相交流交流。
我用的是flash builder 4.6,也不熟悉。
一、flex調(diào)用js。
新建flex項(xiàng)目FlexToJs,如圖所示:
Felx調(diào)用js其實(shí)就是使用的方法ExternalInterface.call()。主界面添加一個(gè)按鈕,并且注冊(cè)一個(gè)點(diǎn)擊事件,如圖:
SayHellWorld是字符串,對(duì)應(yīng)我們調(diào)用的js文件里面的方法,名字一樣,params是所傳的參數(shù)字符串。
接下來(lái)我們使用WebStorm創(chuàng)建一個(gè)HellWorld.js文件(代碼簡(jiǎn)單,用文本編輯器也可以快速創(chuàng)建),代碼如下:
將此js文件放在FlexToJs/html-template下,這是運(yùn)行時(shí)代碼的存放地址,如果需要調(diào)試,那么需要在FlexToJs/bin-debug下面也放一份,如圖:
在index.template.html里面加上一句<script type="text/javascript" src="HelloWorld.js"></script>,就是加一個(gè)js的引用,這個(gè)都會(huì),不用截圖了吧!在FlexToJs.html里面同樣地方在你保存的時(shí)候會(huì)自動(dòng)加上這句話,有興趣的可以研究他們的關(guān)系。接下來(lái)運(yùn)行FlexToJs.mxml,在點(diǎn)擊按鈕的時(shí)候會(huì)通過(guò)我們添加引用的界面去調(diào)用js文件里面的方法sayHelloWorld,最后彈出警告,如圖:
我這個(gè)電腦不知咋的,IE下可以,chrome下就是不行,按鈕都出不來(lái)。
下面,我們來(lái)優(yōu)化代碼,上面如果不需要傳遞參數(shù),你在js文件里面就不使用,但是flex的那個(gè)參數(shù)還是要寫上,不然有些時(shí)候會(huì)出錯(cuò)誤。
如果我們需要返回值呢?需要傳遞非字符串的參數(shù)呢?
下面我們就一起來(lái)改一改吧!
把FlexToJs.mxml內(nèi)部改為如下:
按鈕需要添加一個(gè)id,主要是為了方面使用,很容易明白我使用了數(shù)組傳遞給js,并且返回一個(gè)新的數(shù)組來(lái)改變按鈕的顯示。而之前的HelloWorld.js變?yōu)椋?/P>
也很容易明白,就改變了一下數(shù)組里面的內(nèi)容。最后結(jié)果為:“Hello yy!Hello xx!Hello zz!”
,返回值和傳參都完成了,基本可以滿足大家的需求了,不過(guò)這些參數(shù)只能滿足常用的String、int等,如果是自己寫的類想傳遞,那么你在兩邊都得寫解析的函數(shù)了,這里就不做詳細(xì)介紹了,大家可以自己嘗試。
二、js調(diào)用flex。
有人可能會(huì)提出當(dāng)我們調(diào)用了js文件,二如果js里面需要在某時(shí)候調(diào)用flex里面的方法如何辦呢?下面我們就來(lái)解決這個(gè)問(wèn)題。
繼續(xù)使用剛才的項(xiàng)目,直接在上面做修改。將FlexToJs.mxml改為如下:
去掉了按鈕,不需要了,注意在Application最后添加了一個(gè)事件,在初始化完成后調(diào)用initApp,這里的sayCallBack對(duì)應(yīng)js里面的方法,在這里監(jiān)聽(tīng),當(dāng)在js里面觸發(fā)調(diào)用此方法時(shí)會(huì)轉(zhuǎn)化給callBack來(lái)處理,最后返回值給js里面的init。Js文件如下:
這里dou.sayCallBack調(diào)用的就是flex里面的那個(gè)字符串方法。
最后在文件index.template.html里面需要添加一個(gè)按鈕,如圖:
這個(gè)按鈕調(diào)用js里面的init方法。運(yùn)行后的效果:
參數(shù)和返回值都有了,應(yīng)該滿足大家的需求了吧!后續(xù)如果有時(shí)間再把flex調(diào)用js控制出二維地圖和三維球的過(guò)程寫寫,不過(guò)這些都需要使用超圖的一些第三方控件了!希望對(duì)大家有所幫助。
相關(guān)文章
Flex字體加粗問(wèn)題只能對(duì)英文的字體加粗
在flex中對(duì)label進(jìn)行字體加粗的時(shí)候,只能對(duì)英文的字體加粗,而中文的就不可以加粗,解決方法如下,希望對(duì)大家有所幫助2014-01-01flex通過(guò)java后臺(tái)獲取ip和pcname示例代碼
這篇文章主要介紹了flex通過(guò)java后臺(tái)獲取ip和pcname的具體實(shí)現(xiàn),需要的朋友可以參考下2014-05-05flex中event.preventDefault()方法取消事件的默認(rèn)行為
當(dāng)點(diǎn)擊datagrid的第一和第四項(xiàng)時(shí),itemEdit事件將不起作用,許多事件都有默認(rèn)執(zhí)行的關(guān)聯(lián)行為,接下來(lái)為大家詳細(xì)介紹下,感興趣的朋友可以參考下哈2013-04-04Flex中TabNavigator設(shè)置Tabs樣式思路及源碼
這篇文章主要介紹了Flex中TabNavigator如何設(shè)置Tabs樣式有哪些思路,感興趣的朋友可以看看下面的源碼2014-05-05Flex 基于數(shù)據(jù)源的Menu Tree實(shí)現(xiàn)代碼
由外部參數(shù)flashvars指定數(shù)據(jù)源的文件位置或render鏈接,在源數(shù)據(jù)上加href和target屬性來(lái)控制打開(kāi)窗口,可自定義父節(jié)點(diǎn)和子節(jié)點(diǎn)圖標(biāo),不設(shè)置采用系統(tǒng)默認(rèn),感興趣的你可以了解下啊,或許對(duì)你有所幫助2013-01-01Flex上傳本地圖片并提前瀏覽的實(shí)現(xiàn)方法
個(gè)性頭像最終需要上傳到服務(wù)器的文件系統(tǒng)中,但是程序希望在用戶選擇后直接有個(gè)預(yù)覽,針對(duì)這個(gè)問(wèn)題,下面有個(gè)不粗的實(shí)現(xiàn),希望對(duì)大家有所幫助2014-01-01Flex中實(shí)現(xiàn)對(duì)一個(gè)text渲染不同的字體顏色示例
本文為大家詳細(xì)介紹下Flex中如何實(shí)現(xiàn)對(duì)一個(gè)text渲染不同的字體顏色,具體的實(shí)現(xiàn)思路及代碼如下,有興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07flex4.0 利用外部項(xiàng)呈示器顯示List信息并添加圖片示例
利用外部項(xiàng)呈示器顯示List信息并添加圖片,在本文有個(gè)不錯(cuò)的示例,喜歡的朋友可以參考下,希望對(duì)大家有所幫助2013-09-09flex的tree動(dòng)態(tài)加載大量數(shù)據(jù)與滾動(dòng)條相關(guān)問(wèn)題探討
本文將對(duì)flex的tree動(dòng)態(tài)加載大量數(shù)據(jù)與滾動(dòng)條相關(guān)的問(wèn)題進(jìn)行探討,感興趣的朋友可以參考下哈,希望對(duì)你有所幫助2013-05-05