Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法


Posted in Javascript onAugust 15, 2014

Ext4.2+ Ext.grid.plugin.RowExpander存在bug,添加的collapsebody,expandbody无法触发,查看了下 Ext.grid.plugin.RowExpander对应的源代码,没有添加collapsebody,expandbody事件,即使按照网上的方 法重写Ext.grid.plugin.RowExpander的init和toggleRow方法也无法触发 collapsebody,expandbody事件。

解决办法:给grid对象添加collapsebody,expandbody事件,然后给grid配置这2个事件,同时重写Ext.grid.plugin.RowExpander的toggleRow方法,触发grid添加的这2个事件即可。

测试源代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Ext4.2+ Ext.grid.plugin.RowExpander无法触发collapsebody,expandbody事件解决办法</title>
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" rel="external nofollow" />
<script type="text/javascript" src="../../ext-all-debug.js"> </script>
<script>
Ext.override(Ext.grid.plugin.RowExpander, { // Override to fire collapsebody & expandbody
 init: function(grid) {
  this.callParent(arguments);
//  grid.getView().addEvents('collapsebody', 'expandbody');//ext论坛找到的解决办法,这样也无法添加事件
//存储grid对象
this.grid=grid
  this.grid.addEvents('collapsebody', 'expandbody');//给grid对象添加事件
 },
 toggleRow: function(rowIdx, record) {
  var me = this,
   view = me.view,
   rowNode = view.getNode(rowIdx),
   row = Ext.fly(rowNode, '_rowExpander'),
   nextBd = row.down(me.rowBodyTrSelector, true),
   isCollapsed = row.hasCls(me.rowCollapsedCls),
   addOrRemoveCls = isCollapsed ? 'removeCls' : 'addCls',
   ownerLock, rowHeight, fireView;
 
 
  // Suspend layouts because of possible TWO views having their height change
  Ext.suspendLayouts();
  row[addOrRemoveCls](me.rowCollapsedCls);
  Ext.fly(nextBd)[addOrRemoveCls](me.rowBodyHiddenCls);
  me.recordsExpanded[record.internalId] = isCollapsed;
  view.refreshSize();
 
 
  // Sync the height and class of the row on the locked side
  if (me.grid.ownerLockable) {
   ownerLock = me.grid.ownerLockable;
//   fireView = ownerLock.getView();
   view = ownerLock.lockedGrid.view;
   fireView=ownerLock.lockedGrid.view;
   rowHeight = row.getHeight();
   // EXTJSIV-9848: in Firefox the offsetHeight of a row may not match
   // it is actual rendered height due to sub-pixel rounding errors. To ensure
   // the rows heights on both sides of the grid are the same, we have to set
   // them both.
   row.setHeight(isCollapsed ? rowHeight : '');
   row = Ext.fly(view.getNode(rowIdx), '_rowExpander');
   row.setHeight(isCollapsed ? rowHeight : '');
   row[addOrRemoveCls](me.rowCollapsedCls);
   view.refreshSize();
  } else {
   fireView = view;
  }
//通过grid触发事件,而不是view
this.grid.fireEvent(isCollapsed ? 'expandbody' : 'collapsebody', row.dom, record, nextBd);
//下面为ext论坛的解决办法,无效
//fireView.fireEvent(isCollapsed ? 'expandbody' : 'collapsebody', row.dom, record, nextBd);
  // Coalesce laying out due to view size changes
  Ext.resumeLayouts(true);
 },
});
//Ext.loader.setConfig({enabled:true});
Ext.onReady(function() {
 Ext.QuickTips.init();
 var store = new Ext.data.Store({
   
  fields:[
   {name:'fileName',type:'string'},
   {name:'room',type:'string'},
   {name:'recordDate',type:'string'},
   
  ],
  data:[
   {fileName:'文件1',room:'会议室1',recordDate:'2014-07-03'},
   {fileName:'文件2',room:'会议室2',recordDate:'2014-07-03'},
   {fileName:'文件3',room:'会议室3',recordDate:'2014-07-03'}
  ],
  autoLoad:true
 });
 var expander = new Ext.grid.plugin.RowExpander({
  rowBodyTpl:new Ext.XTemplate('<div class="detailData">pp</div>'),
  listeners:{
   expandbody:function(){//无法触发这个是事件
    console.log('Ext.grid.plugin.RowExpander');
   }
  }
 });
  Ext.create('Ext.grid.Panel',{
  xtype: 'row-expander-grid',
  store: store,
  listeners:{
   expandbody:function(){//OK,可以触发
    console.log('fired from grid');
   }
  },
  renderTo:Ext.getBody(),
  columns: [
   {text: "文件名称", flex: 1, dataIndex: 'fileName'},
   {text: "会议室", dataIndex: 'room'},
   {text: "录制日期", renderer: Ext.util.Format.dateRenderer('Y-m-d'), dataIndex: 'recordDate'}
  ],
  width: 600,
  height: 300,
  plugins:expander,
  collapsible: true,
  animCollapse: false,
  title: 'Expander Rows in a Collapsible Grid',
  iconCls: 'icon-grid'
 });
});
</script>
</head>
<body id="docbody">
</body>
</html>

Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法

Javascript 相关文章推荐
js版本A*寻路算法
Dec 22 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
jQuery setTimeout()函数使用方法
Apr 07 Javascript
JS数组(Array)处理函数整理
Dec 07 Javascript
基于d3.js实现实时刷新的折线图
Aug 03 Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
Sep 15 Javascript
11行JS代码制作二维码生成功能
Mar 09 Javascript
微信小程序定位当前城市的方法
Jul 19 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
Feb 08 Javascript
JavaScript数组 几个常用方法总结
Nov 11 Javascript
element tree树形组件回显数据问题解决
Aug 14 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
Aug 15 #Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 #Javascript
js创建表单元素并使用submit进行提交
Aug 14 #Javascript
使用typeof判断function是否存在于上下文
Aug 14 #Javascript
java、javascript实现附件下载示例
Aug 14 #Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 #Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 #Javascript
You might like
PHP中cookie和session的区别实例分析
2014/08/28 PHP
PHP加密解密类实例分析
2015/04/20 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
2007/01/09 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
node内置调试方法总结
2018/02/22 Javascript
express 项目分层实践详解
2018/12/10 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
详解Python 函数如何重载?
2019/04/23 Python
详解python编译器和解释器的区别
2019/06/24 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
C#公司笔试题
2014/03/28 面试题
Linux的文件类型
2016/07/05 面试题
四年级下册教学反思
2014/02/01 职场文书
创新比赛获奖感言
2014/02/13 职场文书
家长学校培训材料
2014/08/20 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
英文感谢信范文
2015/01/21 职场文书
余世维讲座观后感
2015/06/11 职场文书
公司财务管理制度
2015/08/04 职场文书
学生安全责任协议书
2016/03/22 职场文书
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
pandas求平均数和中位数的方法实例
2021/08/04 Python