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 相关文章推荐
ExtJs3.0中Store添加 baseParams 的Bug
Mar 10 Javascript
node.js中的fs.openSync方法使用说明
Dec 17 Javascript
第十章之巨幕页头缩略图与警告框组件
Apr 25 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
Dec 08 Javascript
Vue.js 2.5新特性介绍(推荐)
Oct 24 Javascript
浅析vue中的MVVM实现原理
Mar 04 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
微信小程序实现时间进度条功能
Nov 17 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
Feb 17 Javascript
three.js如何实现3D动态文字效果
Mar 03 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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
动态更新highcharts数据的实现方法
2016/05/28 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
Python实现多属性排序的方法
2018/12/05 Python
Python的几种主动结束程序方式
2019/11/22 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
办公室主任职责范文
2013/11/08 职场文书
八年级历史教学反思
2014/01/10 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
2014年教研工作总结
2014/12/06 职场文书
律师函格式范本
2015/05/27 职场文书
重阳节活动主持词
2015/07/04 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
小组组名及励志口号
2015/12/24 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python