Ext.grid.RowExpander插件的使用,
来源:互联网 发布:软件开发工作建议 编辑:程序博客网 时间:2024/05/05 03:48
看官方的例子时候由一个grid实例,在每一行之前有个加号,展开可以显示内容,在实际应用中还是非常有用的,照搬例子的代码,发现老是提示对象不存在,查阅资料后发现是没有加载插件,这里和大家分享下Ext.grid.RowExpander插件的使用,
首先定义表格grid
//生成表格
function makeGrid(){
return new Ext.grid.GridPanel({
border:false,
viewConfig: {
forceFit:true//加入该选项全屏显示表格且自适应大小,不产生横向滚动条
},
buttonAlign :'left',
region:'center',
plugins: expander,//定义插件
loadMask: true,
store: ds,
cm: new Ext.grid.ColumnModel([
expander,//加载插件
new Ext.grid.RowNumberer(),
//new Ext.grid.CheckboxSelectionModel(),
{header:"ID",width:50,sortable:true,dataIndex:'roles_id'},
{header:"名称", width:100,sortable:false,dataIndex:'roles_<?php echo $user_languag;?>_name'},
{header:"类型", width:100,sortable:false,renderer:check,dataIndex:'roles_type'}
]),
//sm:new Ext.grid.CheckboxSelectionModel(),
//autoExpandColumn:4,
autoScroll: true,
tbar: [
{text:"添加",iconCls:'add_role',handler:newRole},{xtype:'tbseparator'},
//{text:"删除",iconCls:'del',handler:del},{xtype:'tbseparator'},
{text:"复制权限",iconCls:'copy',handler:copyRole},{xtype:'tbseparator'},
{text:"刷新",iconCls:'refresh',handler:function (){ds.reload();}},
'<font color="red">提示:双击一行可进行编辑!</font>'
],
bbar: new Ext.PagingToolbar({
pageSize: 50,
store: ds,
displayInfo: true,
displayMsg: '第{0} 到 {1} 条数据 共{2}条',
emptyMsg: '没有数据'
})
});
}
接着在生成表格之前加载插件,插件代码在ext官方论坛找到
/*********************************************
Ext.grid.RowExpander插件
*********************************************/
Ext.grid.RowExpander = function(config){
Ext.apply(this, config);
this.addEvents({
beforeexpand : true,
expand: true,
beforecollapse: true,
collapse: true
});
Ext.grid.RowExpander.superclass.constructor.call(this);
if(this.tpl){
if(typeof this.tpl == 'string'){
this.tpl = new Ext.Template(this.tpl);
}
this.tpl.compile();
}
this.state = {};
this.bodyContent = {};
};
Ext.extend(Ext.grid.RowExpander, Ext.util.Observable, {
header: "",
width: 20,
sortable: false,
fixed:true,
menuDisabled:true,
dataIndex: '',
id: 'expander',
lazyRender : true,
enableCaching: true,
getRowClass : function(record, rowIndex, p, ds){
p.cols = p.cols-1;
var content = this.bodyContent[record.id];
if(!content && !this.lazyRender){
content = this.getBodyContent(record, rowIndex);
}
if(content){
p.body = content;
}
return this.state[record.id] ? 'x-grid3-row-expanded' : 'x-grid3-row-collapsed';
},
init : function(grid){
this.grid = grid;
var view = grid.getView();
view.getRowClass = this.getRowClass.createDelegate(this);
view.enableRowBody = true;
grid.on('render', function(){
view.mainBody.on('mousedown', this.onMouseDown, this);
}, this);
},
getBodyContent : function(record, index){
if(!this.enableCaching){
return this.tpl.apply(record.data);
}
var content = this.bodyContent[record.id];
if(!content){
content = this.tpl.apply(record.data);
this.bodyContent[record.id] = content;
}
return content;
},
onMouseDown : function(e, t){
if(t.className == 'x-grid3-row-expander'){
e.stopEvent();
var row = e.getTarget('.x-grid3-row');
this.toggleRow(row);
}
},
renderer : function(v, p, record){
p.cellAttr = 'rowspan="2"';
return '<div class="x-grid3-row-expander"> </div>';
},
beforeExpand : function(record, body, rowIndex){
if(this.fireEvent('beforeexpand', this, record, body, rowIndex) !== false){
if(this.tpl && this.lazyRender){
body.innerHTML = this.getBodyContent(record, rowIndex);
}
return true;
}else{
return false;
}
},
toggleRow : function(row){
if(typeof row == 'number'){
row = this.grid.view.getRow(row);
}
this[Ext.fly(row).hasClass('x-grid3-row-collapsed') ? 'expandRow' : 'collapseRow'](row);
},
expandRow : function(row){
if(typeof row == 'number'){
row = this.grid.view.getRow(row);
}
var record = this.grid.store.getAt(row.rowIndex);
var body = Ext.DomQuery.selectNode('tr:nth(2) div.x-grid3-row-body', row);
if(this.beforeExpand(record, body, row.rowIndex)){
this.state[record.id] = true;
Ext.fly(row).replaceClass('x-grid3-row-collapsed', 'x-grid3-row-expanded');
this.fireEvent('expand', this, record, body, row.rowIndex);
}
},
collapseRow : function(row){
if(typeof row == 'number'){
row = this.grid.view.getRow(row);
}
var record = this.grid.store.getAt(row.rowIndex);
var body = Ext.fly(row).child('tr:nth(1) div.x-grid3-row-body', true);
if(this.fireEvent('beforcollapse', this, record, body, row.rowIndex) !== false){
this.state[record.id] = false;
Ext.fly(row).replaceClass('x-grid3-row-expanded', 'x-grid3-row-collapsed');
this.fireEvent('collapse', this, record, body, row.rowIndex);
}
}
});
接着定义模板,主要是显示展开的内容,用到Ext.template类
expander = new Ext.grid.RowExpander({
tpl : new Ext.Template(
'<br> <b>游戏权限:</b> {games}<br><br>',
' <b>下属人员:</b> {users}<br><br>'
)
});
- Ext.grid.RowExpander插件的使用,
- Ext.grid.plugin.RowExpander的使用
- Ext.grid.plugin.RowExpander的简单用法
- ext中对RowExpander的使用
- Ext.Net 1..0中的RowExpander插件
- 在看官方的例子时候由一个grid实例,在每一行之前有个加号,展开可以显示内容,在实际应用中还是非常有用的,照搬例子的代码,发现老是提示对象不存在,查阅资料后发现是没有加载插件,这里和大家分享下Ext.grid.RowExpander插件的使用,
- Ext.ux.grid.RowExpander 如何设置为默认展开效果
- Ext.ux.grid.RowExpander默认展开所有行
- EXTJS——ext.grid.RowExpander模板数据刷新问题
- Ext grid.RowEditor的使用
- ExtJS 插件 --- RowExpander 格式化模板的数据
- Ext4.2+ Ext.grid.plugin.RowExpander无法触发collapsebody,expandbody事件解决办法
- Ext框架的Grid使用介绍
- Ext框架的Grid使用介绍
- Ext框架的Grid使用介绍
- Ext.grid.Panel使用
- Ext中RowExpander数据刷新
- 封装的Ext Grid
- ADO CacheSize的疑问
- mobile上监控文件的操作-SHChangeNotifyRegister
- 控制span的width属性且不换行
- SEO网站看关键字排在前几页的那些网站
- ubuntu10.10配置java开发环境
- Ext.grid.RowExpander插件的使用,
- csdn博客美化
- 手机振动控制
- 课程设计
- HDUOJ1106 排序
- Android中RadioGroup组与onCheckedChanged事件
- velocity大会明天在京召开,对架构和性能优化感兴趣的朋友请积极关注
- Java的那些故事
- 视频编码器-Rainbow