细说新一代HTML5/JavaScript的UI控件wijm
admin
2023-01-30 07:08:08
0

Wijmo 5是一组JavaScript控件,但是不要与Widgets混淆。在此前开发Wijmo的时候,我们能够用像jQuery UIjQuery 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 5Controls

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

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

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

//初始化FlexGrid实例对象为一个DOM element

 var myFlexGrid = newwijmo.grid.FlexGrid('#FlexGrid1');

 

属性

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

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

//设置FlexGrid可编辑

myFlexGrid.isReadOnly= false;

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

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

//设置FlexGrid的selectionmode

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控件中的一样,可通过addHandlerremoveHandler订阅、取消订阅事件。

//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 ControlJS Widget进行对比

Wijmo 5 ControlsJS Widgets
使用TypeScript类,提供类JavaScript构造函数Functions接口,通过设置JavaScript对象属性
EcmaScript5:属性有getters setters接口使用“options”的属性,通过设置子参数
直接设置属性值通过调用函数实现属性赋值
通过控件的实例调用方法以传递函数名字符串方式进行方法调用
通过在事件调用addHandler订阅通过使用bind(),并以字符串方式传递widget name + even name订阅事件
IDEs提供智能感知(依赖IDE非强类型,无智能感知
设计时语法检测无语法检测
运行时错误提示运行时很少错误提示

欢迎各位朋友一起探讨学习!

相关资料链接:

http://www.evget.com/product/3506


相关内容

热门资讯

上海交大发布第七届“十大科技进... 7月22日,上海交通大学第七届“十大科技进展”在闵行大零号湾成果转化中心发布。本届入选成果包括6项基...
MEMS微纳加工进入共享时代:... 一、行业背景:科研与中试的"产线困境" 一、行业背景:科研与中试的"产线困境" 在半导体与微纳制造领...
行业首款水冷+185Hz超高刷... 一、前言:9英寸机身里塞下了整个Steam库 拿到红魔游戏平板5 Pro之前,我对它没太大期待,正常...
雷军亲自下场讲物理!小米澎程不... 7月22日,小米CEO雷军在微博抛出“灵魂三问”,9系全尺寸大空间四驱SUV你选哪个? 1. 大电池...
最新民调:特朗普的支持者对伊朗... 美伊谅解备忘录失效,停火局面被打破,双方最近大打出手。据美媒报道,美国最新民调显示,特朗普的支持者对...
专业可靠的AirTag平替销售... 智能防丢市场新选择:AirTag平替产品的核心选购逻辑与可靠源头厂商解析 在苹果AirTag带动下...
黄仁勋谈中国AI模型:非常优秀... 英伟达首席执行官黄仁勋7月21日表示,中国开源AI模型“非常优秀”,美国企业“应该使用”。他同时警告...
西门子无霜冰箱冷藏室不制冷冷冻... 1、可能是制冷剂发生了泄漏的情况;2、可能是因为风机的问题导致了不制冷情况。3、可能是外界温度的影响...
防盗门钥匙能锁门不能开门怎么回... 1、如果是喇叭锁时,导致门锁忽然打不开很可能是其锁斜舌脱勾而出现故障,这时可以将锁具螺丝下开,对锁舌...
西门子洗衣机不排水怎么回事 1、排水管不通畅或排水泵堵转。2、可能是电脑板坏了。3、排水泵与电脑板之间接触不良或排水泵损坏引起的...