2007-04-16
云想衣裳花想容--JSI组件模型介绍(一)
关键字: JSI
JSI组件模型是一种用来装饰简单html元素的框架,使用简单的xml标记,标识其装饰行为,比如将一个普通的input装饰成一个日期输入控件,将一 个html ul标记装饰成菜单或树,将一个textarea装饰成一个代码语法高亮显示区域,或一个wysiwyg html编辑器。
JSI启动后将自动检查decorator标记,构建层次结构,自动做相关类的寻找、导入和装饰操作;实现零脚本代码的web富客户端编程。
页面上有: 标签页装饰器(TabBox….)、源代码高亮显示装饰器(Code)、日期选择装饰器(DatePicker)、包含装饰器(Include):

云想衣裳花想容--JSI组件模型介绍(二)已经发布,那里有装饰过程及其原理的介绍:
http://www.javaeye.com/topic/71425
JSI启动后将自动检查decorator标记,构建层次结构,自动做相关类的寻找、导入和装饰操作;实现零脚本代码的web富客户端编程。
代码示例:
- 日期选择器 (DatePicker):
- <d:datepicker>
- <input type="text" name="test2" />
- </d:datepicker>
- 编辑器示例 (Editor):
- <d:editor>
- <textarea name='editorText'>This is some <strong>sample text</strong>. You are using <a
- href="http://www.fckeditor.net/">FCKeditor</a>.</textarea>
- </d:editor>
- Spinner控件(Spinner 类似window时间日期管理中,年份调节的控件):
- <d:spinner start='0' end='8' step='2'>
- <input type="text" name="test2" value='0' />
- </d:spinner>
- 客户端包含(Include):
- <d:include url='menu.xml' xslt="menu.xsl"></d:include>
- 代码语法高亮显示控件(Code):
- <d:code language="js">
- <textarea>alert(‘Hello World’)</textarea>
- </d:code>
- 标签页控件(TabBox参照xul tabbox标签):
- <d:tabbox>
- <d:tabs>
- <d:tab>tab1</d:tab>
- <d:tab>tab2</d:tab>
- <d:tab>tab3</d:tab>
- </d:tabs>
- <d:tabpanels>
- <d:tabpanel>content1</d:tabpanel>
- <d:tabpanel>content2</d:tabpanel>
- <d:tabpanel>content3</d:tabpanel>
- </d:tabpanels>
- </d:tabbox>
- 综合示例:
页面上有: 标签页装饰器(TabBox….)、源代码高亮显示装饰器(Code)、日期选择装饰器(DatePicker)、包含装饰器(Include):
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:d="http://www.xidea.org/taglib/decorator" xml:lang="zh_CN"
- lang="zh_CN">
- <head>
- <script src="../scripts/boot.js"></script>
- <title>DatePicker 示例</title>
- </head>
- <body>
- <h2>DatePicker 示例</h2>
- <!-- 开始标签页装饰器 -->
- <d:tabbox>
- <d:tabs>
- <d:tab>效果</d:tab>
- <d:tab>代码</d:tab>
- </d:tabs>
- <d:tabpanels>
- <d:tabpanel>
- <!-- 开始日期装饰器(内嵌式) -->
- <d:datepicker type='grid'>
- <input type="text" name="test1" />
- </d:datepicker>
- <!-- 开始日期装饰器(弹出式) -->
- <d:datepicker>
- <input type="text" name="test2" />
- </d:datepicker>
- </d:tabpanel>
- <d:tabpanel>
- <!-- 开始代码高亮显示 -->
- <d:code language="xml">
- <textarea>
- <!-- 开始日期装饰器(内嵌式) -->
- <d:datepicker type='grid'>
- <input type="text" name="test1" />
- </d:datepicker>
- <!-- 开始日期装饰器(弹出式) -->
- <d:datepicker>
- <input type="text" name="test2" />
- </d:datepicker></textarea>
- </d:code>
- </d:tabpanel>
- </d:tabpanels>
- </d:tabbox>
- <select style="margin-left:120px"><option>弹出的datepicker 可覆盖IE select</option></select>
- <hr />
- <!-- 开始Include装饰器,包含装饰器菜单 -->
- <d:include url='menu.xml' xslt="menu.xsl"></d:include>
- </body>
- </html>
装饰结果:
云想衣裳花想容--JSI组件模型介绍(二)已经发布,那里有装饰过程及其原理的介绍:
http://www.javaeye.com/topic/71425


评论
web application 1.0是不是html5呢?
webapp1即html5,只是webapp1可以有html形式或者xhtml形式。
关于webapp1和wf2,我提出来,是想建议楼主考虑朝标准化方向靠近。与其自己搞一套组件模型,不如实现这些发展中的标准(甚或扩展之)。例如不是自己设计自己的include标签,而是实现一下xinclude,又如不是搞一个datepiker,而是实现webapp1所做的input扩展。甚至实现整个xforms标准,那就非常棒啦!
xforms的实现有formface 不过没有文档 可能要收费吧. 我一直没有实验成功
web application 1.0是不是html5呢?
webapp1即html5,只是webapp1可以有html形式或者xhtml形式。
关于webapp1和wf2,我提出来,是想建议楼主考虑朝标准化方向靠近。与其自己搞一套组件模型,不如实现这些发展中的标准(甚或扩展之)。例如不是自己设计自己的include标签,而是实现一下xinclude,又如不是搞一个datepiker,而是实现webapp1所做的input扩展。甚至实现整个xforms标准,那就非常棒啦!
不错的建议,模仿已有的标准,可以降低学习成本。
现在的标签也都是模仿mozilla的xul的。
改改几个标签名,也是很简单的事情。
web application 1.0是不是html5呢?
webapp1即html5,只是webapp1可以有html形式或者xhtml形式。
关于webapp1和wf2,我提出来,是想建议楼主考虑朝标准化方向靠近。与其自己搞一套组件模型,不如实现这些发展中的标准(甚或扩展之)。例如不是自己设计自己的include标签,而是实现一下xinclude,又如不是搞一个datepiker,而是实现webapp1所做的input扩展。甚至实现整个xforms标准,那就非常棒啦!
几百毫秒是说一个测试用的上兆的大文件,一般网页不会有这么大,自然也就不会怎么耗时。
但是引用的js控件都很不小啊,虽可采百家之长,我看敢用的人还是。。
且每个js控件都需要学习成本啊,虽对lz很敬佩,话还是得说一下哦
不得不承认,JSI还不成熟。
复杂js控件的体积,是可能成为问题,但是目前来说,也没有更好的办法,用传统模式也是一样的。
只能期待浏览器的更新了,比如hax前面说的xhtml5。
几百毫秒是说一个测试用的上兆的大文件,一般网页不会有这么大,自然也就不会怎么耗时。
但是引用的js控件都很不小啊,虽可采百家之长,我看敢用的人还是。。
且每个js控件都需要学习成本啊,虽对lz很敬佩,话还是得说一下哦
如果是你自己写的,我只有对你敬仰之情犹如滔滔江水。。。
补充一下,文档还需要加强
web application 1.0是不是html5呢?
你去写一个,我来参考参考:)
建议写一个 Dom Query 引擎加快查找装饰元素的速度,可以参考一下 Ext 中的 DomQuery
谢谢你的建议,以后抽空看看。
框架的性能优化是一定会做的,无赖分身无术。还是先把欠缺的东西完善起来。
刚才做了一下装饰引擎的性能测试(通过new Date方式计算脚本运行时间)。
以新版javaeye主页为例(64,160字节,也算是大文件了),查找装饰元素需要的时间为:
IE: 0 毫秒。
FF: 50-70 毫秒。
建议写一个 Dom Query 引擎加快查找装饰元素的速度,可以参考一下 Ext 中的 DomQuery
几百毫秒是说一个测试用的上兆的大文件,一般网页不会有这么大,自然也就不会怎么耗时。
拿那个TabBox为例,只要在页面加入
<div tt.impl=TabBanana 还有其它一些属性></div>
就实现了你例子中TabBox效果,和jsptaglib有些类似,呵呵
我采用xml标记而非脚本语言,主要是考虑标记语言代码更简单,编写文档也比较方便
此外标记语言解析比较简单,比较适合可视化工具的开发。