基於TypeScript的FineUIMvc組件式開發
了解FineUIMvc的都知道,FineUIMvc中採用了大量的IFrame框架,對於IFrame的優缺點網上也有很多的討論,這裡我要說它的一個優點「有助於隔離代碼邏輯」,這也是FineUIMvc官網對它的描述。IFrame在網頁上下文中是完全獨立的,這樣也就不存在了樣式及腳本之間的衝突問題。但由於IFrame與上下文之間是隔離的,在交互上也給我們帶來了一些不便。
在接下來的文章中,我將主要介紹如何使用TypeScript對FineUIMvc進行組件式開發,而這裡的組件就是基於IFrame,同時用TypeScript的方式來解決IFrame交互方面的不便。
為了能夠更好的了解,本教程將圍繞一個示例展開,下面為示例的截圖
示例中有2個窗口(採用IFrame框架)及3個組件(分別為組件A、組件B、組件C),組件A在窗口1中顯示,組件B及組件C在窗口2中分別切換顯示
組件A中可以單擊「在窗口2中顯示組件B」及「在窗口2中顯示組件」來切換顯示組件B及組件C,同時組件B及組件C中也可以單擊「刷新窗口1中的組件A」來刷新窗口1
發送按鈕可以發送文本框中的文本到對應的組件中,下面的文本框將會顯示來自其它組件發送過來的文本
介紹完示例後,我來說明一下數據發送與接收的流程,首先當組件A往組件B發送數據時,它並不是通過JS直接發送給組件B,而先回發到伺服器,經伺服器處理後(在發送文本的後加上GUID),再傳輸到組件B中,其它的發送按鈕也是一樣的道理,都要經過伺服器處理後再回傳回來。可以通過顯示及刷新按鈕來重新載入組件,但這也不會影響它們之間的數據交互。
發送數據後的示例圖
這個示例只演示了一個簡單的數據交互,在現實場景中組件與組件之間會存在著大量的數據交互,同時組件中也會夾雜著其它的非FineUIMvc控制項,這樣我們又該如何處理呢?
下面為組件交互的核心代碼(TypeScript代碼)
1 private init {
2 UI.window1.onReady( => {
3 var aComponent = this.getAComponent;
4 if (aComponent) {
5 aComponent.onSendToB((e, m) => {
6 var bComponent = this.getBComponent;
7 if (bComponent) {
8 bComponent.receiveAData(m);
9 }
10 });
11
12 aComponent.onSendToC((e, m) => {
13 var cComponent = this.getCComponent;
14 if (cComponent) {
15 cComponent.receiveAData(m);
16 }
17 });
18
19 aComponent.onShowBComponent( => {
20 BComponent.open(null, UI.window2);
21 });
22
23 aComponent.onShowCComponent( => {
24 CComponent.open(null, UI.window2);
25 });
26 }
27 });
28
29 UI.window2.onReady( => {
30 var bComponent = this.getBComponent;
31 if (bComponent) {
32 bComponent.onSendToA((e, m) => {
33 var aComponent = this.getAComponent;
34 if (aComponent) {
35 aComponent.receiveBData(m);
36 }
37 });
38
39 bComponent.onRefreshAComponent( => {
40 AComponent.open(null, UI.window1);
41 });
42 }
43
44 var cComponent = this.getCComponent;
45 if (cComponent) {
46 cComponent.onSendToA((e, m) => {
47 var aComponent = this.getAComponent;
48 if (aComponent) {
49 aComponent.receiveCData(m);
50 }
51 });
52
53 cComponent.onRefreshAComponent( => {
54 AComponent.open(null, UI.window1);
55 });
56 }
57 });
58 }
示例代碼:
鏈接: https://pan.baidu.com/s/1bJs4Bc 密碼: yz9j
※從零實現一個高性能網路爬蟲(二)應對反爬蟲之前端數據混淆
※javaScript 設計模式系列之一:觀察者模式
※Swift 中 String 取下標及性能問題
※.Net Core中使用ref和Span
TAG:科技優家 |
※Mixed Reality Toolkit-Unity開發系列—Sharing模塊
※微軟收購VR遊戲《The Mage』s Tale》開發商inXile Entertainment
※Mozilla發布Firefox Reality WebVR開發者指南
※Realtek藉助Cadence Innovus成功開發DTV SoC解決方案
※RogueInitiative與EmblematicGroup合作開發全新沉浸式內容
※Facebook Reality Labs正式成立面向VR/AR開發
※Cadence Innovus助力Realtek成功開發DTV SoC解決方案
※望城經濟技術開發區概況Wangcheng Economy and Technology Development Zone
※Justin Timberlake 著用未公開發售「Air Higher」Air Jordan 3 Sample
※BCH應用開發的門戶網站:developer.bitcoin.com
※Ross Video基於UE4開發了圖像引擎Frontier
※《Pokemon Go》開發商收購AR公司Escher Reality
※美高森美和SiFive推出HiFive Unleashed擴展板助力Linux軟體和固件開發人員首次構建RISC-V PC
※谷歌開發新系統Fuchsia 計劃取代Android和Chrome OS
※HoloLens開發者:Magic Leap One確實比HoloLens好
※CRISPR Therapeutics和ViaCyte合作開發同種異體幹細胞療法
※Fieldbit和InfinityAR宣布合作開發AR智能眼鏡
※《Pokemon Go》開發商收購AR API製作公司EscherReality
※安卓開發中的Model-View-Presenter
※《半條命》主創Chet Faliszek加入VR殭屍遊戲開發商Vertigo Games