了解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代码),示例代码还在整理中,事后会放到网上供大家下载。

     private init() {
         UI.window1.onReady(() => {
             var aComponent = this.getAComponent();
             if (aComponent) {
                 aComponent.onSendToB((e, m) => {
                     var bComponent = this.getBComponent();
                     if (bComponent) {
                         bComponent.receiveAData(m);
                     }
                 });

                 aComponent.onSendToC((e, m) => {
                     var cComponent = this.getCComponent();
                     if (cComponent) {
                         cComponent.receiveAData(m);
                     }
                 });

                 aComponent.onShowBComponent(() => {
                     BComponent.open(null, UI.window2);
                 });

                 aComponent.onShowCComponent(() => {
                     CComponent.open(null, UI.window2);
                 });
             }
         });

         UI.window2.onReady(() => {
             var bComponent = this.getBComponent();
             if (bComponent) {
                 bComponent.onSendToA((e, m) => {
                     var aComponent = this.getAComponent();
                     if (aComponent) {
                         aComponent.receiveBData(m);
                     }
                 });

                 bComponent.onRefreshAComponent(() => {
                     AComponent.open(null, UI.window1);
                 });
             }

             var cComponent = this.getCComponent();
             if (cComponent) {
                 cComponent.onSendToA((e, m) => {
                     var aComponent = this.getAComponent();
                     if (aComponent) {
                         aComponent.receiveCData(m);
                     }
                 });

                 cComponent.onRefreshAComponent(() => {
                     AComponent.open(null, UI.window1);
                 });
             }
         });
     }

基于TypeScript的FineUIMvc组件式开发(开头篇)的更多相关文章

  1. 基于TypeScript的FineUIMvc组件式开发(概述)

    WebForm与Mvc 我简单说一下WebForm与Mvc,WebForm是微软很早就推出的一种WEB开发架构,微软对其进行了大量的封装,使开发人员可以像开发桌面程序一样去开发WEB程序,虽然开发效率 ...

  2. Agile.Net 组件式开发平台 - 平台系统介绍

    平台介绍 Agile.Net 组件式开发平台是一款针对企业级产品的开发框架,平台架构基于SOA服务体系,多层组件式架构打造.平台提供企业应用开发所需的诸如ORM.IOC.WCF.EBS.SOA等分布式 ...

  3. Agile.Net 组件式开发平台 - 驱动开发示例

    首先讲一下概念,此驱动非彼驱动.在Agle.Net中我们将组件规划成两种类型,一种是基于业务的窗体组件,一种是提供扩展功能的驱动组件. 打个比方例如一般系统中需要提供身份证读卡功能,然而市面上有很多种 ...

  4. 基于NodeJS的全栈式开发

    前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的 NodeJS,试 ...

  5. (转)也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

    原文链接:http://ued.taobao.org/blog/2014/04/full-stack-development-with-nodejs/ 随着不同终端(pad/mobile/pc)的兴起 ...

  6. Agile.Net 组件式开发平台 - 组件开发示例

    所谓组件式开发平台,它所有的功能模块都是以组件的形式扩展的,下面我来演示一个简单的组件开发例程. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina. ...

  7. 也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

    前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图 ...

  8. 在基于TypeScript的LayaAir HTML5游戏开发中使用AMD

    在基于TypeScript的LayaAir HTML5游戏开发中使用AMD AMD AMD是"Asynchronous Module Definition"的缩写,意思就是&quo ...

  9. 组件式开发(Vue)

    什么是组件式开发: 组件式开发就是将单个组件组合起来,形成一个大的组件进行页面的开发完成 什么是复合型组件: 复合型组件就是将相同的功能写成一个公用的组件(单元组件),供其他组件使用,就类似于后台开发 ...

随机推荐

  1. js的搜索遍历精讲

    搜索算法应该算是每种算法的重点与难点了,本文将讲解JavaScript中的各种常用的遍历算法:希望对大家有所帮助. 深度优先遍历顺序:1245367      广度优先遍历:1234567 1.深度优 ...

  2. WebStorm里启动electron项目

    WebStorm里启动electron项目,其实很简单 一.第一步打开下面的窗口 二.然后输入electron .,然后敲下 回车键,然后等会项目界面就会出现了. PS:electron 和 点之间有 ...

  3. JAVA加密算法系列-AesEBC

    package ***; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java. ...

  4. 在SrollView中嵌套GridView或ListView(转)

    原文链接:http://blog.csdn.net/gaojinshan/article/details/17055511 我想在同一个界面中,使用两个GridView,两个GridView一起上下滚 ...

  5. JavaScript基础学习(四)—Object

    一.Object的基本操作 1.对象的创建      在JavaScript中,创建对象的方式有两种:构造函数和对象字面量.      (1)构造函数 var person = new Object( ...

  6. mysql 分析2 show processlist ;

    show processlist ; 可以查看当前有哪些链接 处于什么状态 分析语句 那些连接处于什么状态 (需要通过脚本观察一段时间内的有运行情况做出统计一直刷新服务器运行状态 ) 当出现下面的几种 ...

  7. 【 js 基础 】 深浅拷贝

    underscore的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有传参,实际上只是为了返回数组的副本,例如 underscore 中 clone 的方法: ...

  8. webpack 打包成功,但是css不起作用

    问题: webpack 打包成功,但是css不起作用 问题分析/解决: 原因有以下几种 使用了webpack2的语法规则不正确; webpack2要求必须写-loader; 可能是只写了css-loa ...

  9. Apache URL重写规则

    1.简介 Apached的重写功能,即是mod_rewrite模块功能,它是apache的一个模块.它的功能非常强大,可以操作URL中的所有部分. 因此我们就可以改写url,给用户提供一个简介大方的u ...

  10. golang环境

    Golang是谷歌开发的一款开源性语言,暂时比较方便的IDE有Inteillj Idea.LiteIDE.Eclipse(Golipse)等,使用起来比较方便的IDE:LiteIDE和Inteillj ...