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年编程生涯

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

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

    费用跟踪应用采用了Wijmo5和Ionic Framework创建,目的是构建一个hybird app. 我们基于<Mobile first! Wijmo 5 + Ionic Framework ...

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

    本教程中,我们用Wijmo 5 和 Ionic Framework实现一个Mobile的工程:Hello World. Ionic是什么? Ionic是一个HTML5框架.免费.开源,用于帮助生成hy ...

  3. Wijmo 5 + Ionic Framework之:费用跟踪 App

    Wijmo 5 + Ionic Framework之:费用跟踪 App 费用跟踪应用采用了Wijmo5和Ionic Framework创建,目的是构建一个hybird app. 我们基于<Mob ...

  4. js 介绍

    createjs 工作内容:html5游戏开发岗位要求:1. 熟悉HTML5特性, 掌握canvas开发技能;2.能独立的搭建出易扩展,高效,强壮,通用的前端底层框架;3.熟悉常用的JS开发框架或工具 ...

  5. Linux智能手机安全策略研究

    Linux智能手机安全策略研究 http://www.zdnet.com.cn    本文是继从“窃听门”事件解读手机Rootkit攻击(http://chenguang.blog.51cto.com ...

  6. Security+学习笔记

    第二章 风险分析 风险管理 评估:确定并评估系统中存在的风险 分析:分析风险对系统产生的潜在影响 响应:规划如何响应风险的策略 缓解: 缓解风险对未来安全造成的不良影响 风险分析流程 资产确定 漏洞确 ...

  7. CVPR 2020论文收藏(转知乎:https://zhuanlan.zhihu.com/p/112337176)

    CVPR 2020 共收录 1470篇文章,根据当前的公布情况,人工智能学社整理了以下约100篇,分享给读者. 代码开源情况:详见每篇注释,当前共15篇开源.(持续更新中,可关注了解). 算法主要领域 ...

  8. DASH----Desktop and mobile Architecture for System Hardware----桌面和移动系统硬件架构(DASH)计划

    http://baike.baidu.com/subview/813787/11301142.htm http://sites.amd.com/cn/business/it-solutions/man ...

  9. 基于token的多平台身份认证架构设计

    基于token的多平台身份认证架构设计 1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...

随机推荐

  1. redis 缓存

    本篇博客只介绍 redis 作为缓存的的一些使用,以及在项目中如何把redis和spring如何集成. 1:redis的maven依赖,redis 依赖   spring-redis 依赖: < ...

  2. Linux 进程一直占用单核CPU分析

    pidstat 1信息

  3. Liferay7 BPM门户开发之6: Activiti数据库换为mysql

    第一步: 在mysql中创建数据库名字叫 'activiti' 执行D:\activiti-5.21.0\database\create下的脚本 第二步: 打开=> apache-tomcat/ ...

  4. vue moment库格式化处理后端传的日期

    开篇 日期时间格式前端和后端都可以处理,我比较推荐前端来处理(定制化高),下面我就介绍下两种处理的方式 后端处理 django默认不经处理传给前端的日期格式为2018-08-26T19:53:36.5 ...

  5. 高德地图添加marker及反地理编码获取POI

    项目中集成百度.高德.腾讯地图已是司空见惯的事情,今天我总结了一下项目中用到的高德地图常用的功能: 1.展示高德地图并定位显示定位图标: 2.添加实时大头针: 3.反地理编码获取周围兴趣点 效果如下: ...

  6. Android应用内展示office文件--腾讯浏览服务(TBS)

    什么是TBS  依托 X5 内核强大的能力,致力于提供优化移动端浏览体验的整套解决方案(官网介绍).我们可利用其做文件浏览功能,支持多种文件格式,完全可以满足需求.更多介绍请看官网:http://x5 ...

  7. IT人如何打造个性化的个人网站(在线简历)

    前言 众所周知,IT行业人员在求职时,如果拥有自己的技术博客和个人网站多少是可以加些分的,因为这也是IT人的技术证明之一.内容丰富的技术博客就不必多少了,往往技术博客大神市场上多是供不应求的,而且技术 ...

  8. 从逻辑思维中学习CSS,从宽高说起

    从宽高说起 从宽高说起,我们知道一个物体的大小是由长.宽.高三个方向的尺寸决定的,但是你想啊电脑显示器是一个平面的,而不是3维,另因网页大部分情况下只需要使用到2维,所以为了简单在CSS中只有宽和高的 ...

  9. 读vue-0.6-filters.js源码

    'abc' => 'Abc' function capitalize (value) { if (!value && value !== 0) return '' value = ...

  10. MySQL修改表、字段、库的字符集及字符集说明

    修改数据库字符集: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...]; 把表默认的字符集和所有字符列( ...