ExtJs扩展之GroupPropertyGrid代码


Posted in Javascript onMarch 05, 2010

ExtJs本身就提供了丰富的空间和良好的界面开发,就如同WinForm的开发一样。但是ExtJs的空间也有不完美的地方,但是有缺点也有他自己的弥补方法。ExtJs的良好的扩展性就是ExtJs自己控件不能实现的最好的方法。
这几个中使用最多的当属ExtJs的PropertyGrid,ExtJs的PropertyGrid使用起来时相当简单的,在ExtJs的官方网站上也有相应的例子,简单的就不在叙述了。但是ExtJs本身的PropertyGrid不能支持分组,在显示的不能将属性进行分组,这是相当郁闷的。不知道为什么ExtJs不提供这样的方法和接口。
于是在网上Google了许久,网上也有类似的内容,叫做《扩展组件:GroupingView+ PropertyGrid (蒙牛版)》。楼主写的很好,但是不知道为什么没有将源码贴上。网上也没有其他的好的建议。无奈中,只能自己花点时间去写个吧。于是打开了ExtJs的源代码,找到了PropertyGrid的源文件,一看,还是比较简单的,
其中几个主要内容就是:
PropertyRecord
PropertyStore
PropertyColumnModel
PropertyGrid
于是拷贝了全部的源代码,创建了文件名为Ext.ux.grid.GroupPropertyGrid.js的脚本文件,并测试值,成功通过,开始阅读PropertyGrid的源代码,发现了以下几个问题:
1、PropertyRecord这个种的内容太少了,仅有name和value,
2、PropertyStore使用的是Ext.data.Store,而没有使用Ext.data.GroupingStore
3、PropertyStore使用的数据中不支持分组,并且更新的时候没有对分组进行处理
而PropertyGrid确实继承EditorGridPanel,这个本身就是可以支持Group分组的,这样PropertyGrid中就不需要修改了。
下面就对这几个问题进行修改,让他支持分组:
1、修改PropertyRecord,添加Group字段。

Ext.ux.grid.GroupPropertyRecord=Ext.data.Record.create( 
[{name:"name",type:"string"},"value","group"] 
);

2、修改PropertyStore以支持GroupingStore

Ext.ux.grid.GroupPropertyStore = function(grid, source){ 
this.grid = grid; 
this.store = new Ext.data.GroupingStore({ 
recordType : Ext.ux.grid.GroupPropertyRecord, 
groupField : "group" 
}); 
this.store.on('update', this.onUpdate, this); 
if(source){ 
this.setSource(source); 
} 
Ext.ux.grid.GroupPropertyStore.superclass.constructor.call(this); 
}; 
Ext.extend(Ext.ux.grid.GroupPropertyStore, Ext.util.Observable, { 
setSource : function(o){ 
this.source = o; 
this.store.removeAll(); 
var data = []; 
for(var k in o){ 
if(this.isEditableValue(o[k])){ 
data.push(new Ext.ux.grid.GroupPropertyRecord({name: k, value: o[k],group:k},k)); 
} 
else if(typeof(o[k]) == 'object'){ 
for(var n in o[k]){ 
data.push(new Ext.ux.grid.GroupPropertyRecord({name: n, value: o[k][n],group:k},k+"&&"+n)); 
} 
} 
} 
this.store.loadRecords({records: data}, {}, true); 
}, // private 
onUpdate : function(ds, record, type){ 
if(type == Ext.data.Record.EDIT){ 
var v = record.data['value']; 
var oldValue = record.modified['value']; 
if(this.grid.fireEvent('beforepropertychange', this.source, record.id, v, oldValue) !== false){ 
if(record.id.indexOf("&&")!=-1) 
{ 
var values = record.id.split("&&"); 
this.source[values[0]][values[1]] = v; 
} 
else 
{ 
this.source[record.id] = v; 
} 
record.commit(); 
this.grid.fireEvent('propertychange', this.source, record.id, v, oldValue); 
}else{ 
record.reject(); 
} 
} 
}, 
// private 
getProperty : function(row){ 
return this.store.getAt(row); 
}, 
// private 
isEditableValue: function(val){ 
if(Ext.isDate(val)){ 
return true; 
}else if(typeof val == 'object' || typeof val == 'function'){ 
return false; 
} 
return true; 
}, 
// private 
setValue : function(prop, value){ 
this.source[prop] = value; 
this.store.getById(prop).set('value', value); 
}, 
// protected - should only be called by the grid. Use grid.getSource instead. 
getSource : function(){ 
return this.source; 
} 
});

主要修改了SetSource,onUpdate这两个方法,并且修改了Store为GroupingStore。这样在去测试,就成功的可以看到PropertyGrid已经可以分组了。效果图如下:
ExtJs扩展之GroupPropertyGrid代码
这样整个工作就完成了。

全部的源代码下载: http://xiazai.3water.com/201003/yuanma/GroupPropertyGrid.rar

Javascript 相关文章推荐
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 Javascript
window.open()详解及浏览器兼容性问题示例探讨
May 29 Javascript
javascript Deferred和递归次数限制实例
Oct 21 Javascript
jQuery+css实现的切换图片功能代码
Jan 27 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
Jul 04 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
JS函数节流和函数防抖问题分析
Dec 18 Javascript
微信小程序模拟cookie的实现
Jun 20 Javascript
详解vue使用$http服务端收不到参数
Apr 19 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
Sep 12 Javascript
vux-scroller实现移动端上拉加载功能过程解析
Oct 08 Javascript
Ajax实现异步加载数据
Nov 17 Javascript
js 获取服务器控件值的代码
Mar 05 #Javascript
jquery checkbox全选、取消全选实现代码
Mar 05 #Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
Mar 05 #Javascript
ExtJS 工具栏 分页事件参数
Mar 05 #Javascript
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 #Javascript
javascript 浏览器检测代码精简版
Mar 04 #Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 #Javascript
You might like
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
Python算术运算符实例详解
2017/05/31 Python
Python 从相对路径下import的方法
2018/12/04 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
测绘工程本科生求职信
2013/10/10 职场文书
运动会开幕式邀请函
2014/01/22 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
我的长征观后感
2015/06/09 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
浅谈python数据类型及其操作
2021/05/25 Python