最近工作上遇到一个需求,就是通过对表格行拖动来对表格里面的数据进行排序。在开发过程中遇到一个问题,就是表格行可以拖动。但是当拖动行到表格底部时,内容块无法自动滚动。
于是查看了gridpanel的api文档,containerScroll该项是用来配置表格在拖动过程中自动产生滚动的效果。原来在表格内部设置了enableDragDrop属性为true时,表格会在构造时给表格添加一个拖动事件。即Ext.grid.GridDragZone。通过查看该类的API,这里面确实有配置内容滚动的属性:
containerScroll : Boolean
如果为true,使用Scrollmanager注册此容器, 在拖拽过程中可以自动进行滚动。
于是马上配置了该属性以为问题解决了,没想到在配置完该项属性之后表格在拖动行时,即使到达表格底部,内容的数据仍然不会产生滚动效果。
相信很多人都会遇到同样的问题,后面通过查找资料终于找到了解决办法。在表格内部添加的Ext.grid.GridDragZone拖动效果里面配置信息有问题。这里可以通过额外的配置可以解决这种问题。
有两种解决办法:
1.通过在修改源代码在代码内部修改表格初始化Ext.grid.GridDragZone拖动,这样就可以从根源上解决问题,不过一般不提倡修改框架本身的代码
2.首先将enableDragDrop设为false。在表格render事件内部自己构造一个拖动即自己定义一个Ext.grid.GridDragZone,
于是马上配置了该属性以为问题解决了,没想到在配置完该项属性之后表格在拖动行时,即使到达表格底部,内容的数据仍然不会产生滚动效果。
相信很多人都会遇到同样的问题,后面通过查找资料终于找到了解决办法。在表格内部添加的Ext.grid.GridDragZone拖动效果里面配置信息有问题。这里可以通过额外的配置可以解决这种问题。
有两种解决办法:
1.通过在修改源代码在代码内部修改表格初始化Ext.grid.GridDragZone拖动,这样就可以从根源上解决问题,不过一般不提倡修改框架本身的代码
2.首先将enableDragDrop设为false。在表格render事件内部自己构造一个拖动即自己定义一个Ext.grid.GridDragZone,
var dd = new Ext.grid.GridDragZone(grid, { ddGroup : grid.ddGroup || 'GridDD', containerScroll:true, scroll:true, afterDragDrop:function(target,e,id){ var dragData = this.dragData; } });通过这样简单的配置就能为表格重新添加一个行拖动效果。要想实现拖动自动滚动效果还得依赖extjs提供的另外的一个全局实例:
Class Ext.dd.ScrollManager
包: | Ext.dd |
所在文件: | ScrollManager.js |
Class: | ScrollManager |
继承自: | Object |
var el = Ext.get('scroll-ct');
el.ddScrollConfig = {
vthresh: 50,
hthresh: -1,
frequency: 100,
increment: 200
};
Ext.dd.ScrollManager.register(el);
看完这个类的使用方法,于是终于找到了如何解决表格拖动滚动的办法了。
Ext.dd.ScrollManager.register(grid.getView().getEditorParent());
通过这行代码即可实现表格行拖动滚动效果。
文章先写到这里了,稍后将奉上一个实例供大家下载。 good luck!