惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
S
SegmentFault 最新的问题
量子位
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 司徒正美
博客园 - Franky
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
B
Blog RSS Feed
C
Check Point Blog
The Cloudflare Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
V
Visual Studio Blog
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 追萝驴

Nginx + Frp + Let'sEncrypt 泛域名证书 Devexpress XAF的前端优化策略 本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容 WIF应用与ADFS 2.0配置实战(续):实现SSO WIF应用与ADFS 2.0配置实战 配置了主机头后访问站点持续要求输入身份凭证,之后401.1 IE持续崩溃备忘 Sharepoint 2010 备忘 APPDEV Sharepoint 2010 For Developers. 笔记 庆祝NH3 GA Released 兼思考两个问题的解决方案 - 追萝驴 WCF部署至IIS问题二则 WCF+Silverlight 异常处理 2 NHibernate: Batch Updates & Batch Inserts - 追萝驴 NHibernate: Session.Save 采用版本控制时无必要地自动Update版本字段的问题 WCF+Silverlight 异常处理 "Exception of type System.ExecutionEngineException was thrown" ExtJS: SuperBoxSelect supports single select mode [转]How to remove an assembly from the Cache if it is locked by Microsoft Installer Ext JS继承: 关于object, constructor和prototype
Adding/removing fields and columns drag & drop bug's fix
追萝驴 · 2010-05-26 · via 博客园 - 追萝驴

http://www.extjs.com/forum/showthread.php?53009-Adding-removing-fields-and-columns提供了一个非常好的对GridPanel动态添加列的方法。但经过测试发现有一点小bug,就是在enableColumnMove为true的时候,动态添加的这些column行为异常。

稍加修改如下:

代码

Ext.override(Ext.grid.ColumnModel, {
addColumn:
function(column, colIndex) {
if (typeof column == 'string') {
column
= { header: column, dataIndex: column };
}
var config = this.config;
this.config = [];
if (typeof colIndex == 'number') {
config.splice(colIndex,
0, column);
//handling the id of config to fulfill the drag&drop (when enableColumnMove is true) problem
for (var i = colIndex + 1; i < config.length; i++)
{
var id = config[i].id;
if (typeof id == 'number') {
config[i].id
++;
}
}
}
else {
colIndex
= config.push(column);
}
this.setConfig(config);
return colIndex;
},
removeColumn:
function(colIndex) {
var config = this.config;
this.config = [config[colIndex]];
config.splice(colIndex,
1);
//handling the id of config to fulfill the drag&drop (when enableColumnMove is true) problem
for (var i = colIndex + 1; i < config.length; i++)
{
var id = config[i].id;
if (typeof id == 'number') {
config[i].id
--;
}
}
this.setConfig(config);
}
});

ColumnModel是根据config中的id来排序的,所以修正如上。

完整代码见原贴。

需要注意的是,这里假设动态添加column之前没有拖动过原有列,例如初始加载时。所以如果需求是拖动后再添加,需要稍微复杂一点的代码,基本概念就是id不要重复即可。可以参考源码中的

Ext源码中的Ext.grid.HeaderDropZone.onNodeDrop方法。