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 相关文章推荐
NiftyCube——轻松实现圆角边框
Feb 20 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 Javascript
深入理解JavaScript中的传值与传引用
Dec 09 Javascript
jquery做的一个简单的屏幕锁定提示框
Mar 26 Javascript
浅谈Javascript实现继承的方法
Jul 06 Javascript
javascript如何操作HTML下拉列表标签
Aug 20 Javascript
如何使用jquery实现文字上下滚动效果
Oct 12 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
浅谈vux之x-input使用以及源码解读
Nov 04 Javascript
JavaScript实现省市联动效果
Nov 22 Javascript
使用pkg打包ThinkJS项目的方法步骤
Dec 30 Javascript
javascript贪吃蛇游戏设计与实现
Sep 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
详解python中asyncio模块
2018/03/03 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
光荣入党自我鉴定
2014/01/22 职场文书
社区活动邀请函范文
2014/01/29 职场文书
人力资源部经理岗位职责规定
2014/02/23 职场文书
政府法律服务方案
2014/06/14 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
企业员工集体活动方案
2014/08/17 职场文书
优秀教研组申报材料
2014/12/26 职场文书
初中历史教学反思
2016/02/19 职场文书