共同学习YUI-EXT(GIRD部分)
当我第一次接触到YUI时,我就有一种把它变成我的东西的冲动,当看到华丽的YUI-EXT时,我知道我已经不能再等了!
让我们一起共同学习吧!
个人认为YUI-EXT做的相当好的是GIRD和LAYOUT,而项目中GIRD用的特别多,所以先从GIRD开始。
由于我们的HERO JACK 同志现在主推ext-1.0(目前版本是ext-1.0-alpha3),我想我们的学习也最好从这个版本开始好了。
一个grid的生成必需依赖下列三个类,Ext.data.Store负责生成数据集,Ext.grid.ColumnModel负责显示数据,而Ext.grid.Grid则负责将这个部分进行组合。具体的用法我们看例子:
Ext.data.Store
Ext.grid.Grid
Ext.grid.ColumnModel
例子1
1.引入相关包(JS和CSS)
js 代码
- "stylesheet" type="text/css" href="../../resources/css/ext-all.css" />
- <!---->
- <script type=< span="">"text/javascript" src="../../yui-utilities.js"></script>
- <script type=< span="">"text/javascript" src="../../ext-yui-adapter.js"></script>
- <!---->
-
- <script type=< span="">"text/javascript" src="../../ext-all.js"></script>
2.得到数据并生成数据集
- var myData = [
- ["001","001","neo","pub001001","1982-12-14 00:00:00.0","15938478221","1",25,"neo"],
- ["002","002","luna","pub001002","1983-03-11 00:00:00.0","13751596026",null,23,"lulu"],
- ["003","003","bear","pub001002",null,null,null,null,null]]
- ];
-
- var ds = new Ext.data.Store({
- proxy: new Ext.data.MemoryProxy(myData),
- reader: new Ext.data.ArrayReader({id: 0}, [
- {name: 'staffId'},
- {name: 'staffCode'},
- {name: 'staffName'},
- {name: 'sex'},
- {name: 'brithday'},
- {name: 'mobilePhone'},
- {name: 'memo'},
- {name: 'age'},
- {name: 'nickname'}
- ])
- });
- ds.load();
-
3.设置显示样式
-
- function castDate(value){
- if(value!=null)
- return value.substring(0,10);
- else return value
- }
-
- var colModel = new Ext.grid.ColumnModel([
- {header: "姓名", width: 200, sortable: true, locked:false, dataIndex: 'staffName'},
- {header: "性别", width: 150, sortable: true, dataIndex: 'sex'},
- {header: "出生日期", width: 150, sortable: true,renderer: castDate, dataIndex: 'brithday'},
- {header: "年龄", width: 150, sortable: true, dataIndex: 'age'},
- {header: "手机", width: 150, sortable: true, dataIndex: 'mobilePhone'},
- {header: "备注", width: 120, sortable: true, dataIndex: 'memo'}
- ]);
-
4.组合并在页面生成一个Grid
-
- var grid = new Ext.grid.Grid('grid-example', {
- ds: ds,
- cm: colModel
- });
- grid.render();
说明: 1.第一步应该没有什么大问题,只要注意加载顺序就OK了
2.数据集的名堂很多,但我们只要抓两个要点就没问题了,一是数据从哪里来(proxy参数决定),二是怎样读取这些数据(reader参数决定)
来源方式主要由类MemoryProxy,HttpProxy和ScriptTagProxy决定,类名表示来源方式,参数决定来源路径,这个例子用的是MemoryProxy,参数是一个数组变量名,表示数据来源于一个内存中的数组,数据来源搞定以后,我们要解析这个数据,不同的数据类型要用到不同的reader,这个例子用的是数组,所以我们要用一个ArrayReader进行解析。
3.显示方面要注意的是renderer,当我们想让显示的数据并不完全按照得到的数据来显示时,我们就要用到这个参数,YUI-EXT提供了很多内置的renderer,当然也提供自定义的renderer,使用起来很简单,一看就会。
4.倒子中'grid-example'中指示GRID要显示的位置,页面上的一个
好像搞定了,SO EASY?
不过实际工作中不会出现如此简单的GRID,通常的做法是要从数据库中取值再显示到GRID,想做就做,JUST DO IT!
个人开发环境(Strust1.1+Hibernate3+tomcat5.0+jdk1.4.2)
例子2(取数据库中的值并显示到GIRD)
1.取数据库并将值存入FORMBEAN
java 代码
- Session session = HibernateUtil.getSessionFactory().getCurrentSession();
-
- session.beginTransaction();
- List results = session.createQuery("select staff.staffId, staff.staffCode, staff.staffName, staff.sex, staff.brithday," +
- "staff.mobilePhone,staff.memo,staff.age,staff.nickname from Staff as staff").list();
-
- session.beginTransaction().commit();
-
- JSONArray ja = JSONArray.fromObject(results);
-
- myform.setStaffdata(ja.toString());
-
- return mapping.findForward("listpage");
-
2。将例1作相应改动就OK
js 代码
- var myData = eval(<!---->);
说明:真的就这么简单??不,如果这么简单,还要程序员做什么,招几个打字员就OK了。
问题是层出不穷的。。
第一步用了一个net.sf.json.JSONArray类,这是一个开源项目,能将各种形式的数据转变成JSONArray(为什么要用JSONArray?因为JSON是javascript标准的一部分,它跟js的合作将比XML愉快),其中就包括Hibernate所比较喜欢的List.这样一来,我们就省了很多数据转化的工作,但是事实证明net.sf.json.JSONArray是个不错的轮子,却不是我们最想要的轮子。
将Hibernate查询得到的List转化成JSONArray的使用过程中会出现这样一些问题。
1.生成不同的JSONArray
相信对HIBERNATE有所了解的人都知道HQL语句"select 所有列 from Staff as staff"和"from Staff"得到的东西并不一样前一个得到的是一个Object[],而后面得到的是Staff[],将两个List转化得到的JSONArray也不一样,前一个是普通JS数组,类似[["001","001","neo"],["002","002","luna"]]而后一个得到的是一个标准的砓JSONArray,类似[{"sex":"pub001001","nickname":"neo"},{"sex":"pub001002","nickname":"lulu"}],这个问题并不难解决,在前台页面用不同的reader就OK了.
2.日期转化问题
第二个问题rocker96兄也遇到过,就是数据库中查找出的DATE对象,变成了这个死样子("brithday":{"month":11,"day":2,"year":82,"nanos":0,"time":408643200000,"seconds":0,"timezoneOffset":-480,"date":14,"hours":0,"minutes":0}),rocker96提议在前台解决,也提出过方案,不过我个人认为对于YUI-EXT这套框架,前台小姐已经够忙的了,还是在后台那帮兄弟做完的好.问题出现的原因是JSONArray没有对Date对象进行处理,决定修改JSONArray源码.代码不多,通过DEBUG找到处理的函数(Hibernate的两种查询方法所得到的不同的List所在的处理方法不同),并加上
- if(value instanceof Timestamp){
- System.out.println("cast date to string!");
- value = value.toString();
- }
日期变成了字符串"1982-12-14 00:00:00.0",前台再用一个renderer,搞定.
YUI及YUI所衍生YUI-EXT给我们系统重构提供一些很不错的方案,代码规范,扩展性好,又有很好的开发文档支持及数量和质量都不错的用户群,希望有一天会出现一套MY-YUI.
下次想和大家分享一下GridEditor,可编辑的GIRD
谢谢rocker96,给了我很多信息.谢谢,希望能交个朋友.
分享到:
相关推荐
通过提供的压缩包文件"ext 2.rar"、"ext教程.rar"和"yui_2.3.1.zip",你可以获得YUI-EXT的源码、文档和示例,进一步学习和研究其使用方法。这些资源将帮助你深入理解如何集成YUI-EXT到项目中,如何创建和配置组件,...
YUI-EXT开发学习帮助手册,自己收集网上资料整理的。
我们将讲讲怎么使用Ext,来完成一些JavaScript常见的任务.这是关于Ext的入门教程。
【标题】"yui-yuidoc-yuidoc-50-529-gc631758" 指向的是一个关于 Yahoo User Interface Library (YUI) 和 YUIDoc 的特定版本或修订版。YUI 是一个开源的 JavaScript 库,提供了一系列模块化的工具,用于构建富有交互...
{"text":"yui-ext.js","id":"/yui-ext.js","leaf":true,"cls":"file"}, ... ] ``` 3. **服务器端JSON生成**: 在服务器端,如ASP JScript,可以编写代码来生成上述JSON格式的数据。这通常涉及到数据库查询,将...
《grunt-yui-compressor:JavaScript与CSS压缩利器的源码解析》 在Web开发中,优化资源加载速度是提升用户体验的重要一环。压缩JavaScript和CSS文件可以显著减少页面加载时间,"grunt-yui-compressor"就是一个这样...
**yuicompressor-maven-plugin详解** `yuicompressor-maven-plugin`是一款强大的Maven插件,主要用于优化前端资源,特别是JavaScript和CSS文件。这个插件是基于YUI Compressor,一个由Yahoo开发的开源工具,它能...
【Yui_ext 学习笔记】 Yui_ext 是基于 Yahoo! UI Library (YUI) 的扩展,主要用于构建富客户端的 Web 应用程序。这篇学习笔记主要介绍了 Yui_ext 的基础知识,适合对 JavaScript 和 HTML DOM 有一定了解的初学者。 ...
**Ajax(yui-slideshow)详解** Ajax,全称Asynchronous JavaScript and XML,是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使得网页实现异步更新,提升了用户...
在本文中,我们将深入探讨名为"ore.yui"的Python库,特别是其0.4.1版本,该库被打包为"ore.yui-0.4.1.tar.gz"文件。 "ore.yui"库很可能是一个开源项目,因为大多数Python库都会遵循开放源代码的精神,允许开发者...
js混淆 压缩 ant结合yui-compressor
在"YUI-ajax框架开发文档"中,我们可以深入探讨YUI如何通过其Ajax组件实现异步数据通信。 YUI中的Ajax框架主要由`YAHOO.util.Connect`和`YAHOO.widget.DataSource`两个关键部分组成。`YAHOO.util.Connect`是YUI的...
《yuicompressor-2.4.8.jar:前端优化与代码压缩的艺术》 在Web开发领域,优化前端性能是一项至关重要的任务,而yuicompressor-2.4.8.jar正是这样一款强大的工具,专为JavaScript代码压缩而设计,助力开发者实现...
npm install yui-compressor ``` 安装完成后,可以使用以下命令对JavaScript或CSS文件进行压缩: ```bash java -jar path/to/yuicompressor.jar --type js input.js -o output.min.js java -jar path/to/yui...
yuicompressor-2.4.2.jar yuicompressor-2.4.7.jar jsZip.exe yuicompressor yui compressor js压缩工具 javascript压缩工具 css压缩工具 ------------------------------------ //压缩JS java -jar yui...
导言 翻了翻以前的旧贴子,有值得回味的地方共分享: Post1: …………….. 我们现在的大量应用依赖于浏览器(主要是 IE)的脚本处理能力,在有些老机器上跑的时候确实会略显缓慢,但是目前的主流机型处理起来已经...
yui compressor 2.4.6 发布日期:2011-04-15 用例: java -jar yuicompressor-2.4.6.jar myfile.js -o myfile-min.js
上述代码中,你需要替换`path/to/`为实际存放YUI库及YUI-Ext库的具体路径。 2. **加载CSS样式文件** ```html <link rel="stylesheet" type="text/css" href="path/to/YUI-Ext/css/file"> ``` 这里列出了一些...
After stumbling upon a young user interface library called YUI-ext several years ago, Shea contributed to its growth by writing documentation, tutorials, and example code. He has remained an active ...
JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools