科技时代新浪首页 > 科技时代 > 学园 > 正文

用AJAX开发智能Web应用程序之高级篇(4)


http://www.sina.com.cn 2005年12月27日 17:31 天极yesky

    七、 为定制标签定义事件

  让我们看一下onItemChanging和onItemChanged事件的定义以及这些事件是怎样在value属性的setter内部被激发和处理的(见所附源码中的列表2)。方法putValue()有几个让人感兴趣的地方。首先,在分析CHECKBOX标签期间,可以调用这个方法-只要指定这个HTMLvalue属性。这正解释了为什么我们为非构造对象建立一个单独的逻辑分支-为把构造过程与一个对用户击键的反应区别开来。其次,在此我们展示了定制事件onItemChanging的创建和处理-它允许应用程序取消行为。请注意,通过这种方式,无论是击键还是通过编程方式实现赋值都能达到取消的目的。

  事件取消

  为了取消事件,一个应用程序应该拦截该事件并且把event.returnValue设置为false。下面的代码片断展示了应用程序是怎样实现取消事件过程的:

cbx_1::onItemChanging() {
. . . . .
if (canNotBeAllowed) {
 event.returnValue=false;
 . . . . .
}

  如果事件没被取消,putValue()把内部的普通HTML复选框的checked属性设置为每个相应的当前值-如果它等于onValue,这个内部复选框将被选中;如果它等于offValue(不存在第三种选择),复选框不被选中(完整的列表见本文所附源码中的列表2)。

  复选框的HTML内幕

  我们控件的绘制是通过助理函数addLabel()和addCheckBox()来实现的并且从一个constructor()内部调用。这些函数把HTML注入进元素的innerHTML。这种注入式HTML的一种简化形式如下所示:

<LABEL for=cb_{uniqueID}>Show Details:</LABEL>
<INPUT id=cb_{uniqueID} type=checkbox />

  在此,uniqueID是一个由IE所生成的唯一的(在一个页面内)字符串-它用来识别HTC的实例。

  八、 再封装

  在我们的CHECKBOX中有一个缺点。按照我们建立它的方式,在constructor()期间被注入的HTML将隶属于宿主该HTC的页面的DOM。而且,全局的JavaScript变量like_value属于它们所在的文档的全局范围。这是危险的,因为我们偶然会遇到命名冲突的可能性:最明显的情形是使用同一个组件的多个实例。另外这还会导致一个可能性-我们的控件可能会偶然地用相同的名称参考其它对象,反之也如此。

  为简化起见,需要建立一种专门的机制来为对象授权启动一个真正模块化方法。幸好,HTC技术支持一种智能答案-viewLink。
 
  把一个控件声明为封装的最容易的方法是把一个额外声明放到打开和关闭的PUBLIC:COMPONENT标签之间:

<PUBLIC:DEFAULTS viewLinkContent/>

  该控件立即就变成封装性的;而且它有自己的HTML文档树-成为主文档的原子组件。该对象的每个实例有它自己的实例值的集合并且只有公共方法和属性能够从外界代码中加以存取。换句话说,该viewLink机制充分地启动了复杂的Web应用程序的设计和实现-通过使用一种真正的OO的基于组件的方法。

  特别地,我们可以简化代码-通过从内部复选框和HTML标签的定义中删除uniqueID后缀,因为我们不再担心命名冲突。因此,我们可以替换下面这一行:

eval( 'cb_'+uniqueID).checked = ( _value == onValue );

  用

cb.checked = ( _value == onValue );

  并相应地改变addCheckbox()和addLabel()。

  九、 结论

  既然AJAX竞赛刚刚开始,那么就不存在什么AJAX标准并且没有现成的你可以依赖以构建你的应用程序的可广为接受的RAD工具。虽然软件供应商们可能还需要较长一段时间来创建这种强健的开发平台,AJAX热心者已经开始着手准备-通过一些良好定义的API把可重用的代码块封装为商业组件。

  以这种方向导航,本文概括了AJAX语言的OO"力量"-JavaScript。另外,还展示了一种可用的组件-授权策略-客户端定制标签技术。我们在仅描述IE特定的定制标签的同时,还另外提供了一个可下载的实例-适于Mozilla浏览器的可扩展的绑定实例。

[上一页] [1] [2] [3] [4]

发表评论

爱问(iAsk.com)



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5595   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2005 SINA Inc. All Rights Reserved

版权所有 新浪网