亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Flex > 正文

flex與js通信與彼此之間的互調整理(二)

2024-09-08 18:16:56
字體:
來源:轉載
供稿:網友

之前寫了一篇flex和js之間的通信,還記得最開始研究這兩門語言如何交互,一晃我的任務也快做完了,公司的realspace產品之開了js的API,但是現在使用flex產品的人也比較多,要求開設flex的三維API,已經過去幾個月了,產品也上線了,有興趣的可以在https://github.com/SuperMap/Flex-Realspace下載,這是一個利用as與js交互放在了一個完整的產品里。

網上也有很多關于flex和js通信的文章,不過不知道大家有沒有注意到好像都需要把js文件放在固定的文件下(flex調用js),并且需要在index.template.html文件里面動手腳,而且你把源代碼考給團隊的其他人,發現flash builder導進去后重新生成了index.template.html,又得自己修改一下,不是很麻煩嗎?如果你是需要此技術做自己的產品的話我建議你一定要看一下我想出的辦法,也許會幫了不少人哦!

一個大項目或者產品,在js代碼里面估計都會有很多用原型建的類,在flex端估計也有很多功能。我們的假設場景是你正在使用flex制作項目,不過有一些功能只能通過js來實現,所以你將部分功能使用js封裝成了一些js的文件,希望通過as與js之間的通信來使用as語言調用js里面的功能。js文件基本已經寫好了,但是因為需要在不少地方懂手腳團隊協作起來不方便,我這篇文章就是用來解決這個問題的。

一、設計好代碼

首先我們需要明白的是:js文件在啟動之后被加載到html頁面里面,我們可以通過ExternalInterface.call("js的方法",參數);在flex端調用js端的方法,我們可以通過ExternalInterface.addCallback("對外公開的方法名",具體實現的方法);來解決在js端調用flex端的方法。

現在我們需要思考:js里面有很多功能,我們每次調用js功能都得去調用相關的方法嗎?那樣as和js之間的耦合不是太高了,不符合設計模式,并且很麻煩。同樣js這邊需要回調(常用在事件回調上)flex的方法時,方法很多,我們是不是也要在flex端動態注冊那么多個方法名稱呢?那樣不怕名稱沖突嗎?所以這樣的實現都是不可取的。

為了達到低耦合,我將as和js之間的通信設定為只有兩座橋,as調用js功能永遠只會通過調用js里面的固定方法,js回調flex的功能也只能調用在程序初始化flex端動態創建的唯一的一個方法。這樣as和js之間的通信永遠只通過這兩個方法來交互,就不會出現之前的很多問題。但是大家肯定想問如何知道我這一次調用的功能和我下一次調用的有什么區別怎么辦?那就是在參數上面做手腳了。說白了就是通過參數來判斷你的行為。

在我們flex realspace產品面as調用js的功能都是通過var result:Object=ExternalInterface.call("SuperMap.Web.Util.ApplicationManager.initBridgeFlexToJs",object);這一局來的,SuperMap.Web.Util.ApplicationManager.initBridgeFlexToJs是在js端的一個文件里面的方法,唯一的as訪問js的通道,特殊的是object,這是一個鍵值對,形如:

復制代碼 代碼如下:


var realArgument:Array=[strServerUrl.toString()+"$String"];
var array:Object={
action:"FUNCTION",
key:this.KEY,
functionName:"checkPluginUpdate",
isReturn:true,
realArgument:realArgument
};


上面的array就是我說的object,里面的action:"FUNCTION"代表我需要調用的是方法,調用的對象的key(唯一標示)是this.KEY,方法名稱是checkPluginUpdate,有返回值,方法的參數是realArgument(一個特殊數組)。

其實這些有點類似json,用來傳遞數據的,而我自定義的一個格式是用來傳遞行為操作的,這個你們可以自己定義,反正核心就是通過參數來判斷你的行為,方法永遠調用同一個,這點明白了就是自己設計上的事情,不過在解析的時候有點麻煩哈!

二、打包js代碼

如果你的代碼符合我這樣的邏輯,交互通過兩座橋來通信,那么我們就開始下一步,其實這樣設計后已經可以使得自己的產品交互起來很方便了,我當時花了一個月就是這么做的,都做的差不多了,上面交代說js代碼不能開放出來,而且每次都需要修改index.template.html文件,太麻煩,希望flex端的開放人員完全看不到js的任何東西,要求需要把js文件打包成為swc文件,通過去調用swc文件里面的js來實現功能,我當時一聽這簡直就是不可能的嘛!不過后來研究了好久,發現這樣可以實現,并且還有它的優勢。

首先我們需要知道如何把js文件打包成為swc文件,新建一個庫項目,將你的js文件都放進去,如下圖:

我建的項目叫bridge,里面有我所有的js文件,還有不少as文件,細心的發現每一個js文件旁邊都有一個...Stream.as文件,這里就是重點了,我們如何才能把js文件打包到swc里面呢,flex提供了一種流的方式,例如上面的ApplicationManager.js文件,我們創建一個類ApplicationManagerStream繼承于flash.utils.ByteArray,代碼如下:

復制代碼 代碼如下:


package SuperMap.Js
{
import flash.utils.ByteArray;
/**
* 制定js文件以及打包方式
*/
[Embed(source="ApplicationManager.js", mimeType="application/octet-stream")]
public class ApplicationManagerStream extends ByteArray
{
public function ApplicationManagerStream()
{
super();
}
}
}


寫好你對應的js文件,一定要和此類放在一個文件夾下,配上打包的類型application/octet-stream,每一個js文件都配置一個相應的as類,這樣在

里面會自動生成好打包好的swc文件

現在問題又來了,里面是二進制的東西,我們如何使用啊,不是我們平時寫的as類,寫了什么方法引用這個包直接使用就行。

所以我們還需要一個as類。這里我創建IncludeStream.as,代碼如下:

復制代碼 代碼如下:

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级大片在线观看| 日韩精品在线视频观看| 国产一区二区丝袜高跟鞋图片| 97久久精品国产| 久久久久久这里只有精品| 欧美成人精品激情在线观看| 欧美视频中文字幕在线| 日韩中文字幕精品视频| 久热精品视频在线观看| 久久五月情影视| 日韩精品亚洲元码| 久久69精品久久久久久久电影好| 欧美成人三级视频网站| 久久久免费电影| 日韩精品在线观看网站| 国产精品91久久久久久| 91理论片午午论夜理片久久| 国外色69视频在线观看| 国产香蕉一区二区三区在线视频| 浅井舞香一区二区| 在线观看久久久久久| 深夜精品寂寞黄网站在线观看| 66m—66摸成人免费视频| 国产精品99蜜臀久久不卡二区| 精品五月天久久| 日韩精品视频在线观看网址| 久久久精品在线观看| 韩国一区二区电影| 姬川优奈aav一区二区| 日韩va亚洲va欧洲va国产| 97精品伊人久久久大香线蕉| 欧美日韩成人在线视频| 97碰碰碰免费色视频| 在线观看欧美www| 欧美黑人一级爽快片淫片高清| 日韩在线免费视频观看| 亚洲级视频在线观看免费1级| 色香阁99久久精品久久久| 日韩精品中文字幕视频在线| 亚洲精品天天看| 国产精品久久久久av免费| 久久久国产在线视频| 国内精品久久久| 深夜成人在线观看| 亚洲丝袜一区在线| 亚洲二区在线播放视频| 欧美午夜久久久| 日韩精品在线视频美女| 黑人巨大精品欧美一区二区| 国产精品亚洲精品| 亚洲性夜色噜噜噜7777| 亚洲网站在线观看| 538国产精品一区二区免费视频| 亚洲美女av网站| 亚洲理论在线a中文字幕| 亚洲精品美女久久久久| 亚洲人成毛片在线播放| 精品免费在线观看| 欧美国产日韩中文字幕在线| 亚洲人成欧美中文字幕| 日韩亚洲综合在线| 国产成人福利网站| 欧美日韩国产二区| 亚洲欧洲国产伦综合| 成人午夜在线视频一区| 亚洲一区二区免费| 国产免费一区二区三区在线观看| 午夜精品一区二区三区av| 欧美午夜精品久久久久久浪潮| 亚洲精品电影在线| 国产成人一区二区三区| 国产精品视频最多的网站| 成人免费视频在线观看超级碰| 欧美精品xxx| 日韩一区二区欧美| www高清在线视频日韩欧美| 中文一区二区视频| 欧美一区在线直播| 色先锋资源久久综合5566| 国产精自产拍久久久久久蜜| 亚洲精品国产综合久久| 中文亚洲视频在线| 中文字幕在线观看亚洲| 97精品伊人久久久大香线蕉| 久久69精品久久久久久久电影好| 九九精品在线观看| 一区二区亚洲精品国产| 亚洲人成啪啪网站| 亚洲人成绝费网站色www| 国产丝袜精品第一页| 国产福利视频一区| 欧美精品久久久久久久久| 欧美洲成人男女午夜视频| 精品亚洲一区二区三区在线播放| 欧美黑人性生活视频| 国产精品一二三视频| 久久免费少妇高潮久久精品99| 亚洲欧美国内爽妇网| 久久综合久久美利坚合众国| 久久精品色欧美aⅴ一区二区| 久久久中文字幕| 色在人av网站天堂精品| 中文字幕精品av| 欧美激情一区二区三区在线视频观看| 欧美精品18videos性欧美| 91系列在线播放| 国产精品一区电影| 精品久久在线播放| 欧美成人免费在线观看| 久久精品美女视频网站| 欧美与黑人午夜性猛交久久久| 成人在线一区二区| 亚洲综合色av| 国语自产在线不卡| 久久人人爽人人爽人人片亚洲| 在线看日韩av| 欧美午夜精品久久久久久浪潮| 黄色成人av网| 日韩久久精品电影| 亚洲精品99999| 最近免费中文字幕视频2019| 欧美激情一区二区久久久| 国产在线98福利播放视频| 91超碰caoporn97人人| 日本在线精品视频| 亚洲激情 国产| 亚洲精品国产精品乱码不99按摩| 日韩中文字幕精品| 久久国产精品影片| 日韩免费av在线| 亚洲欧洲日产国产网站| 久久久久中文字幕2018| 亚洲xxxxx电影| 这里精品视频免费| 欧美高清自拍一区| 久久久久久综合网天天| 97人人做人人爱| 91爱爱小视频k| 国产精品美女无圣光视频| 欧美老女人性生活| 上原亚衣av一区二区三区| 在线观看国产精品日韩av| 成人黄色午夜影院| 久久精品在线播放| 国产成人一区二区在线| 精品视频在线播放色网色视频| xxx欧美精品| 欧美美女操人视频| 久久久精品亚洲| 欧美人与性动交| 欧美又大又硬又粗bbbbb| 久久久天堂国产精品女人| 人人澡人人澡人人看欧美| 亚洲午夜性刺激影院| 97碰碰碰免费色视频| 黑人巨大精品欧美一区二区| 姬川优奈aav一区二区| 欧亚精品中文字幕| 日韩高清av一区二区三区| 国产精品视频大全| 国产精品久久久久7777婷婷| 亚洲精品女av网站| 久久视频在线播放| 亚洲一区第一页|