Mobile First! Wijmo 5 之 架构

CSDN移动开发频道率先报道的《Mobile First!jQuery UI组件集Wijmo五年最大更新》引起开发者极大关注。

本文就开发者关心的话题之一架构,展开叙述。

Wijmo 5是一组JavaScript控件,但是不要与Widgets混淆。在此前开发Wijmo的时候,我们能够用像jQuery UI和jQuery Mobile Widget 框架来构建它,同时也为我们构建Web框架--Wijmo节省了时间。

但是,当我们希望构建一个更现代的Wijmo 5,我们认为现在是时候重新审视JavaScript UI组件,尤其是语法和API接口。在做了大量的研究和讨论后,我们使用了“真正的JavaScript控件(true JavaScript Controls)”,如你在.NET中使用类似的属性,方法和事件等API,同样的在JavaScript UI组件的使用方法几乎完全相同。

同时,我们选择IE9作为Wijmo 5浏览器支持的基准版本,因为IE9支持ECMAScript 5语法,而这点对我们的Wijmo 5架构非常关键,由此创造了新的Wijmo 5架构。

ECMAScript 5 Controls

我们的Wijmo 5框架直接采用了ECMAScript 5。我们的源码使用TypeScript,这使得开发非常容易。如,使用它创建了控件基类(Base Control Class), 所有的控件均派生自该基类。

JS的控件如同类对象一样,大小写敏感,且提供了构造函数用于初始化,同时也提供了属性、方法、事件。

如,FlexGrid控件可通过如下方法进行初始化:

//初始化FlexGrid实例对象为一个DOM element
 var myFlexGrid = new wijmo.grid.FlexGrid('#FlexGrid1');

 

属性

在我们的ES 5控件中,我们采用了Object.defineProperty()。这种方法使得我们可以在JS下像使用.NET控件一样便捷。因为,这种方法允许我们定义属性的getters和setters接口,因此,我们可以按照写.NET代码的逻辑思路直接调用属性,非常方便。

设置控件的属性非常方便,直接赋值即可,完全不用通过函数调用来实现。

//设置FlexGrid可编辑
myFlexGrid.isReadOnly = false;

还可通过类似的方法对事件进行赋值、检查属性是否有值。 如果IDE支持只能感知(如VS 2013), 则可通过智能感知的自动完成功能来对控件属性赋值。智能感知对于使用控件来说,非常便捷,可以很好的提高工作效率。

为了方便,同样提供了枚举(Enums)

//设置FlexGrid的selection mode
myFlexGrid.selectionMode = wijmo.grid.SelectionMode.CellRange;

属性还可通过标准的JS对象方式获得,如,您可以通过如下方法获得控件的get属性接口:

//检查FlexGrid是否可编辑
var readOnly = myFlexGrid.isReadOnly;

如果你熟练的使用.NET语法编程,那么你会非常熟悉这些属性方法。如果你熟练的使用JS编程,那么对这种优美的API接口也会喜欢。

可以对比看如下的对Wijmo Grid Widget赋值语法:

//Wijmo的 Grid Widget允许可编辑
$('#WijmoGrid1').wijgrid('option', 'allowEditing', true);

这种语法可称为“字符串类型编程”,依赖于字符串的大小写来设置属性值,如设置错误,则不会报错,这个对开发调试将会非常麻烦。

方法

Wijmo 5中的方法使用起来非常方便,可直接通过控件调用控件对应的方法,且调试比较方便。

//刷新FlexGrid控件,以引起relayout和redraw
myFlexGrid.refresh();

对比JS Widget 调用刷新的方法

//刷新Wijmo Grid Widget
$('#WijmoGrid1').wijgrid('doRefresh');

如同上面的属性一样,依赖字符串大小写调用方法,调试错误则非常麻烦。

事件

Wijmo 5控件中的事件使用,如同.NET控件中的一样,可通过addHandler、removeHandler订阅、取消订阅事件。

//FlexGrid cell编辑完成事件
myFlexGrid.cellEditEnded.addHandler(function (sender, args) {
//Do something

});

对应的JS Widget 订阅事件的语法:

//订阅Wijmo cell 编辑完成事件
$('#WijmoGrid1').bind('wijgridaftercelledit', function (e, args) {
//Do something

});

 

Controls vs. Widgets

综上所述,下面用表对Wijmo 5 Control和JS Widget进行对比


Wijmo 5 Controls


JS Widgets


使用TypeScript类,提供类JavaScript构造函数


Functions接口,通过设置JavaScript对象属性


EcmaScript 5:属性有getters 和 setters接口


使用“options”的属性,通过设置子参数


直接设置属性值


通过调用函数实现属性赋值


通过控件的实例调用方法


以传递函数名字符串方式进行方法调用


通过在事件调用addHandler订阅


通过使用bind(),并以字符串方式传递widget name + even name订阅事件


IDEs提供智能感知(依赖IDE)


非强类型,无智能感知


设计时语法检测


无语法检测


运行时错误提示


运行时很少错误提示

 

架构师访谈:《Wijmo 5 CTO:从Web到移动,我的25年编程生涯

时间: 2024-09-23 21:43:13

Mobile First! Wijmo 5 之 架构的相关文章

Mobile first! Wijmo 5 + Ionic Framework之:费用跟踪 App

费用跟踪应用采用了Wijmo5和Ionic Framework创建,目的是构建一个hybird app. 我们基于<Mobile first! Wijmo 5 + Ionic Framework之:Hello World!>的环境,将在本教程中完成费用跟踪App的构建.下面的代码结构是本教程完成要达到的效果,请预先创建好文件和目录. www/ --> 工程根目录 index.html --> app 布局文件 (主HTML文件) css/ --> css 目录 js/ --&

Mobile first! Wijmo 5 + Ionic Framework之:Hello World!

本教程中,我们用Wijmo 5 和 Ionic Framework实现一个Mobile的工程:Hello World. Ionic是什么? Ionic是一个HTML5框架.免费.开源,用于帮助生成hybird mobile Apps (混合移动应用). Ionic包含3部分: CSS 样式:用于渲染Web页面,使得页面更接近原生移动应用 (Native App). AngularJS:Ionic使用AngularJs的扩展指令作为核心框架库,同时AngularJs也加快了开发过程. Apache

物联网操作系统驱动行业快速发展

当物联网和操作系统这个话题出现在IT界时,"嵌入式操作系统"这个术语与"实时操作系统"(RTOS)经常互换使用.但实际上,一些嵌入式操作系统有实时功能,另一些则没有这种功能. 真正的RTOS物联网设备需要处理数据时没有缓冲延迟.RTOS的好处包括两大类:第一,能够实现多任务处理,能够调度和优先处理任务,还能够管理资源在多个任务之间的共享.这种操作系统通常用于比较复杂的航空.工业和医疗物联网设备中.第二,功耗比较低,对资源的要求也比较低,比如处理能力和内存.十之八九,

x86架构能拯救微软Win10 Mobile移动生态吗?

一直以来,关于Windows Phone会支持x86架构处理器的传言没有停息,现在这个传言已经在Win10 Mobile上成为了事实,微软硬件开发中心的一个页面显示Windows 10 Mobile支持x86架构处理器,这一消息也得到了微软一位有关发言人的证实. 作为PC市场的盟友,微软和英特尔在移动领域中的发展都不算顺利.市面上搭载英特尔处理的手机屈指可数,而Windows Phone同样可以说萎靡不振.那么,如果Windows 10 Mobile有了英特尔x86架构处理器的支持后,微软移动生

微软已准备好为“ARM”架构手机推送Windows 10 Mobile四月更新

面向Windows Insider项目的Fast通道和Slow通道移动端用户,在本月的补丁星期二中发布最新版本,版本号为Build 15063.138.而本次版本调整中最大的意外就是名字上的调整,从之前的"技术预览版"变成了"面向ARM架构手机的2017年4月更新,Windows 10版本号为15063.138." 除了名字方面的调整,本次更新在内容上并没有太大的变化.毕竟目前Windows设备大部分都采用高通骁龙处理器,本次更新比较常规,带来了安全方面的修复和改善

jquery mobile中怎么将input和button放在同一行

问题描述 jquery mobile中怎么将input和button放在同一行 jquery mobile中怎么将input和button放在同一行 解决方案 <div class="ui-grid-a"> <div class="ui-block-a"> <input name="telcx" id="telcx" type="tel" value=""

BaaS云架构核心模式之Serverless架构 - 用服务代替服务器(Martin Fowler)

Martin Fowler最近非常推崇的serverless架构模式,是BaaS云架构实现的核心架构模式. Martin Fowler在2016.6.17号发表了一篇博客: <Serverless Architectures>,引起业界广泛关注: 在这篇博客里,他介绍了serverless架构,以及FaaS,Microservice,Docker等流行的架构和概念,描述了Amazon AWS lambda的价值, 进一步将这种云时代的架构清晰的展现在大家的视野里. 本文很多内容来自这篇博客,让

人人网移动开发架构统一问题服务器架构设计

文章描述:人人网移动开发架构. 前言 说起手机操作平台的发展先要说移动终端的发展,因为平台的发展离不开移动终端,近十年移动终端发展和未来移动终端趋势大体可分为以下四个个阶段: 相关厂商内容 送给光棍节的促销,电子商务的背后-<架构师>11月刊免费下载! 第一个阶段:功能终端.满足用户基本通信需求,如发短信.打电话,附加些贪食蛇.推箱子小游戏. 第二个阶段:智能化的终端.可扩展第三方应用,实现上网浏览等互联网基础功能,以诺基亚S60手机为代表的. 第三个阶段:互联网和平台化的终端.手机和互联网更

w3c技术架构介绍

w3c|架构 作者:阿宏 2006-2-10 9:38:04 原文:http://www.w3.org/Consortium/technology 原作者:w3c 翻译:阿宏 图例说明 W3C技术架构图描绘了一个两层的模型:万维网体系结构(被标注为"One Web")建立在互联网(Interner)体系结构之上.图中丰富的Web层显示了W3C关心的领域和发展的技术. Web体系结构被描绘成一系列的层,每一层都建立在另一层之上.从底至顶依次为: URI/IRI, HTTP Web Arc