了解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. jQuery对象长度size

    jQuery对象有两个方法获取其长度,一个是length属性,一个是调用size()方法,据说前者的效率比后者的高. 代码如下: var DQNRList=$("a[id^='DQNR']& ...

  2. CSS盒模型和文本溢出

    CSS盒模型和文本溢出 学习目标 认识盒子模型 盒子模型的组成部分 学习盒子模型的相关元素margin padding 文本溢出相关的属性 一.认识盒子模型 盒模型是css布局的基石,它规定了网页元素 ...

  3. Android 微信第三方登录

    步骤一 微信开发者平台 我开始的解决思路是,去微信开发者平台看API文档. 这个API文档的主要意思呢,有三点: 1.你得下载这几样东西(下载链接),一个是他的范例代码,一个是他的签名生成工具. 2. ...

  4. DUBBO高级配置:多注册中心配置

    有时候我们需要的服务不在同一个 zookeeper 注册中心上,此时我们需要在 DUBBO 配置文件中配置多个注册中心. 下面我们在之前创建项目的基础上在 provider 模块中增加一个 IBook ...

  5. State模式学习笔记

    选用了一个假设需要用户验证的例子进行State模式学习,这个例子并不恰当.无所谓了,只要能学习到其中的内容即可. 适用性: 1,一个对象的行为取决于他的状态,并且它必须在运行时刻依据状态改变他的行为. ...

  6. java 基础知识九 类与对象

    java  基础知识九  类与对象 1.OO(Object–Oriented )面向对象,OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应 ...

  7. C#中的泛型和泛型集合

    泛型 泛型引入了一个概念:类型参数.通过使用类型参数(T)减少了运行时强制转换或装箱操作的风险,通过泛型可以最大限度的重用代码,保护类型的安全及提高性能,他的最常见应用就是创建集合类,可以约束集合类中 ...

  8. 对quartz定时任务的初步认识

    已经好久没有写技术博文了,今天就谈一谈我前两天自学的quartz定时任务吧,我对quartz定时任务的理解,就是可以设定一个时间,然后呢,在这个时间到的时候,去执行业务逻辑,这是我的简单理解,接下来看 ...

  9. require.js疑惑

    昨天小颖分享了一篇require.js入门 ,今天小颖发现了一个很郁闷的问题,希望大神们帮小颖解释下到底是什么原理才能出现以下的现象,其实小颖昨天也有问过园友里的一位帅锅,只是他解释的小颖没太明白.嘻 ...

  10. javascript中json对象json数组json字符串互转及取值

    今天用到了json数组和json对象和json类型字符串之间互转及取值,记录一下: 1.json类型的字符串转换为json对象及取值 var jsonString = '{"bar" ...