游乐游手机版
首页/前端开发/文章详情

ExtJS4表格嵌套rowExpander行展开应用

时间:2026-06-11 07:08
今天来做一个带明细数据的 Grid 表格,最直接的实现方案是表格嵌套。效果如下图所示,一目了然。 在 Grid 中,每条记录的左侧都有一个“+”号,点击即可展开一个明细子表格。所有数据(包括列名)均从后台获取,目前子表格先用本地数据做测试,方便调试。下面贴出几段核心代码,作为技术记录。 复制代码 代
今天来做一个带明细数据的 Grid 表格,最直接的实现方案是表格嵌套。效果如下图所示,一目了然。


在 Grid 中,每条记录的左侧都有一个“+”号,点击即可展开一个明细子表格。所有数据(包括列名)均从后台获取,目前子表格先用本地数据做测试,方便调试。下面贴出几段核心代码,作为技术记录。

复制代码 代码如下:


function displayInnerGrid(renderId) {

// Model for the inside grid store(内部网格存储模型定义)
Ext.define('TestModel', {
extend: 'Ext.data.Model',
fields: [
{ name: 'Field1' },
{ name: 'Field2' },
{ name: 'Field3' }
]
});

// Dummy data for the inside grid(内部网格的测试数据)
var dummyDataForInsideGrid = [
['a', 'a', 'a'],
['b', 'b', 'b'],
['c', 'c', 'c']

];

var insideGridStore = Ext.create('Ext.data.ArrayStore', {
model: 'TestModel',
data: dummyDataForInsideGrid
});

innerGrid = Ext.create('Ext.grid.Panel', {
store: insideGridStore,
selModel: {
selType: 'cellmodel'
},
columns: [
{ text: "明细1", dataIndex: 'Field1' },
{ text: "明细2", dataIndex: 'Field2' },
{ text: "明细3", dataIndex: 'Field3' }
],
columnLines: true,
autoWidth: true,
autoHeight: true,
//width: 400,
//height: 200,
frame: false,
// iconCls: 'icon-grid',
renderTo: renderId
});

/* innerGrid.getEl().swallowEvent([
'mousedown', 'mouseup', 'click',
'contextmenu', 'mouseover', 'mouseout',
'dblclick', 'mousemove'
]); */

}


function destroyInnerGrid(record) {

var parent = document.getElementById(record.get('id'));
var child = parent.firstChild;

while (child) {
child.parentNode.removeChild(child);
child = child.nextSibling;
}

}


接下来是 Grid 的事件绑定部分,思路非常直接:展开时创建子表格,折叠时销毁子表格。

复制代码 代码如下:


grid_huizong.view.on('expandBody', function (rowNode, record, expandRow, eOpts) {
//console.log(record.get('id'));
displayInnerGrid(record.get('id'));
});

grid_huizong.view.on('collapsebody', function (rowNode, record, expandRow, eOpts) {
destroyInnerGrid(record);
});


注意在定义 Grid 时,需要添加一个插件——rowexpander。使用起来非常简单,配置如下即可:

复制代码 代码如下:


plugins: [{
ptype: 'rowexpander',
rowBodyTpl : [
'

',
'

'
]
}],


关于这个 rowexpander 插件,网上有些资料说需要额外引用,但实际测试发现即使不引入也能正常运行,可能是框架版本已经自带了。 最后提醒一下:上面三段代码中都出现了关键的 id 字段。这个字段可以根据实际需要改名,但必须与后台返回数据的 fields 中第一项保持一致。本例中后台返回的 fields 第一项正是 id,所以直接使用了。如果后台传的是其他字段名,务必同步修改。
来源:https://www.jb51.net/article/49611.htm
上一篇ExtJS4动态生成Grid导出Excel实现方法 下一篇ExtJS4中给同一个FormPanel设置不同URL的方法
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Layui弹出层监听子页面键盘快捷键实现方法
前端开发 · 2026-07-06

Layui弹出层监听子页面键盘快捷键实现方法

子页面键盘事件监听需在DOM加载完成后绑定,父页无法直接监听子页按键,必须由子页自身监听后通过parent或postMessage通知父页。典型写法为子页调用父页已定义的关闭函数。需注意焦点状态、输入法及layui版本兼容性等陷阱。

Layui表单提交时携带当前页面Meta信息的实现方法
前端开发 · 2026-07-06

Layui表单提交时携带当前页面Meta信息的实现方法

Layui表单提交不会自动携带页面Meta信息,需在form on( submit )回调中手动读取meta内容并拼接到表单数据,注意后端字段映射及特殊字符编码,多meta时按需选取。

HTML5拖拽事件流状态转移监控调试
前端开发 · 2026-07-06

HTML5拖拽事件流状态转移监控调试

HTML5拖拽事件流易因漏监听或未调用preventDefault而中断。需掌握dragstart设置数据、dragover接受放置、drop触发条件等关键点。通过统一日志捕获事件上下文、识别常见状态丢失场景并配合可视化面板,可清晰定位拖拽过程断点。

uni-app实现小红书商品详情图卡片切换
前端开发 · 2026-07-06

uni-app实现小红书商品详情图卡片切换

通过手写touch事件与transform控制五张卡片,动态计算translateX、scale、opacity及z-index模拟层叠滑动效果。滑动距离超过80rpx触发切换,否则复位。图片仅渲染当前及前后两张,有效优化加载性能与渲染效率。

图像旋转倾斜与扭曲的Canvas像素矩阵变换
前端开发 · 2026-07-06

图像旋转倾斜与扭曲的Canvas像素矩阵变换

Canvas图像变形本质是操作坐标系,图像被动跟随。旋转需先平移原点至目标中心再旋转后复位;倾斜通过仿射变换矩阵实现;扭曲无原生API,可用分块模拟或转用WebGL。每次变换前保存状态,完成后恢复,避免坐标系偏移。