posts - 176, comments - 240, trackbacks - 0, articles - 7

[导入]witrix平台中的ajax支持

Posted on 2006-02-22 20:36 canonical 阅读(585) 评论(0)  编辑  收藏 所属分类: Witrix开发平台

web程序需要完成  html <--> java 之间的映射,在界面越来越复杂,越来越多变的今天,这项工作也变得越来越困难。按照级列设计理论的观点,我们应该去寻求一些中间的过渡步骤。在 witrix平台中,tpl模板引擎正扮演了这种中间角色。通过tpl模板我们实现了如下映射路径

html <--> tpl <--> java

注 意到这里html与tpl之间,以及tpl与java之间的映射都不是trivial的同构关系,而是都可能存在着复杂的运算过程,从而实现了html与 java映射过程中复杂性的分解与均摊。tpl与java之间的关联主要通过EL(expression language)表达式来完成,而html与tpl的映射则主要通过自定义标签(tag)机制。
注意到tpl所提供的中间层具有独立的重大意 义,它并不是臆造的或者是简单的技术驱动的结果。实际上,在web开发中除了java结构与html结构之外还存在着第三种结构,即用户眼中的界面结构, 本来它与html所描述的结构是简单的一一对应的,但是随着界面技术的发展,html的描述能力逐渐被耗尽,成为了internet时代的"汇编语言"。 现在一个简单的页面片断就可能对应着大量html代码,因而丧失了"所写即所见"的简单性。tpl通过强大的抽象能力在某种程度上恢复了程序员对于界面表 现结构的直观控制能力,并在一定程度上保留了html所见即所得的特性。

在witrix平台中因为存在着tpl这一强大的抽象层,使得我们对于ajax的支持可以采取更加灵活的方式。
ajax(Asynchronous JavaScript + XML)的标准结构是
html <--> js <==> xml <==> java

在 这种结构中通过xml信道的只是数据,而界面的表达逻辑与展现逻辑完全由js来控制。这种结构发展的一个极端是所有的界面展现结构都由 javascript动态构造出来,而完全丧失了html静态描述的特点,丧失了所见即所得的设计。与直接实现html<-->java之间 的映射情况类似,直接实现 html <--> js之间的映射也是困难的,尽管dom模型的支持可能使得js映射的难度要低于java映射。

在witrix平台中ajax的方案为
html <--> js <==> tpl <--> java

即tpl取代了ajax标准方案中xml的位置,使得映射过程的复杂性得以分散化。

结合jsplet框架的拉模式(pull mode),我们定义了如下ajax访问接口
js.ajax.load({request='objectName=/@Test&objectEvent=query',tpl:'/test.tpl:partA',targetId:'testDiv'});

1。 远程服务请求就是一段普通的http post request, 避免了额外的xml编码解码需求。
2。请求到的数据先由tpl文件来进行处理。注意到这里tpl文件的url分成两部分,前一部分是tpl文件的虚拟路径,而 :后面的部分,即partA指出请求的是该tpl文件内的partA部分,而不是整个tpl文件。
3。返回的html结果被填充到targetId所指定的html元素中。

test.tpl文件的内容
<html>
<body>

<tpl:define id="partA">
<img tpl:tag="ui:EditTable" />
</tpl:define>

<div id="testDiv">
<img tpl:tag="ui:ViewTable" />
</div>

</body>
</html>

tpl具有强大的结构构造能力,在这里我们以非常小的代价实现了tpl片断的定义,例如test.tpl中的partA部分。这里通过id访问tpl片断就如同js中通过id来访问html片断一样。
最后提一个很重要的思想:大量零碎的代码片断需要集中存放,否则人的精力会被耗散。一个反例就是struts中的action, 明明只干那么点事,偏偏要占据一个单独的java文件,占据大量单独的配置条目,最终给程序员带来很大的困扰。

只有注册用户登录后才能发表评论。


网站导航: