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 相关文章推荐
javascript 可以拖动的DIV(二)
Jun 26 Javascript
js对象之JS入门之Array对象操作小结
Jan 09 Javascript
基于Jquery与WebMethod投票功能实现代码
Jan 19 Javascript
JS声明变量背后的编译原理剖析
Dec 28 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
Js Jquery创建一个弹出层可加载一个页面
May 08 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
Aug 26 Javascript
简单谈谈javascript中this的隐式绑定
Feb 22 Javascript
javascript实现移动端上的触屏拖拽功能
Mar 04 Javascript
Vue.js下拉菜单组件使用方法详解
Oct 19 Javascript
在js文件中引入(调用)另一个js文件的三种方法
Sep 11 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实现链结人气统计
2006/10/09 PHP
php实现httpRequest的方法
2015/03/13 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
js获取域名的方法
2015/01/27 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
Python中的Classes和Metaclasses详解
2015/04/02 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
Sql面试题
2013/03/20 面试题
初级Java程序员面试题
2016/03/03 面试题
打架检讨书100字
2014/01/19 职场文书
校园之声广播稿
2014/01/31 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
python实现股票历史数据可视化分析案例
2021/06/10 Python