关于保存列表表头的配置,一般我们不需要与后台交互,直接保存在 localStorage 中就能满足常规使用需求(需要浏览器支持)。

直接上代码,插件:

 Ext.define('ux.plugin.ColumnCustom', {
alias: 'plugin.columnCustom',
xtype: 'columnCustom',
//初始化
init: function (gridPanel) {
var me = this;
me.owner = gridPanel;
//根据已有配置项设置表头状态
me.setColumnConfig(gridPanel);
gridPanel.on({
columnschanged: me.saveColumnConfig,
scope: me
});
}, setColumnConfig: function (gridPanel) {
var me = this,
xtype = gridPanel.getXType(),
currentColumnConfig = me.getCurrentColumnConfig(),
columnConfig = currentColumnConfig[xtype],
columns = gridPanel.getColumns();
if (!columnConfig) return;
columns.forEach(function (column) {
var dataIndex = column.config.dataIndex;
//只有常规列才有显式的dataIndex,序号列等非常规列应排除在外
if (!dataIndex) return;
column.setHidden(columnConfig[dataIndex]);
});
},
saveColumnConfig: function () {
var me = this,
gridPanel = me.owner,
currentColumnConfig = me.getCurrentColumnConfig(),
columns = gridPanel.getColumns(),
xtype = gridPanel.getXType(),
config = {};
columns.forEach(function (column) {
var dataIndex = column.config.dataIndex;
//只有常规列才有显式的dataIndex,序号列等非常规列应排除在外
if (!dataIndex) return;
config[dataIndex] = column.isHidden();
});
//使用xtype作为索引是相对可靠的做法
currentColumnConfig[xtype] = config;
//localStorage的值类型限定为string类型
localStorage.setItem('columnConfig', Ext.encode(currentColumnConfig)); },
getCurrentColumnConfig: function () {
var allColumnConfigString = localStorage.getItem('columnConfig'),
allColumnConfig = Ext.decode(allColumnConfigString, true);
return allColumnConfig || {};
}
});

如何使用:由于这是一个比较常规的需求,因此这里默认给所有的gridPanel配置此插件,并支持手动配置参数禁用之,考虑复写gridPanel类。

代码如下:

Ext.define('override.grid.Panel', {
override: 'Ext.grid.Panel',
requires: ['ux.plugin.ColumnCustom'], columnCustomDisable: false, initComponent: function () {
var me = this;
me.callParent();
//默认全部加上自动保存表头插件,此处追加一个可配属性来禁用此插件
if (!me.columnCustomDisable) {
me.addPlugin('columnCustom');
}
}
});

以上。

  

  

ExtJs如何使用自定义插件动态保存表头配置(隐藏或显示)的更多相关文章

  1. mybatis自定义插件动态修改sql语句

    step1:定义Interceptor实现org.apache.ibatis.plugin.Interceptor import org.apache.commons.logging.Log; imp ...

  2. bootstrap table插件动态加载表头

    这篇文章主要为大家详细介绍了bootstrap table插件动态加载表头,具有一定的参考价值,感兴趣的小伙伴们可以参考一下   bootstrap的table属性已经很熟悉了,最近遇到一个问题,犹豫 ...

  3. CKEditor在线编辑器增加一个自定义插件

    CKEditor是一个非常优秀的在线编辑器,它的前身就是FCKEditor,CKEditor据官方说是重写了内核的,但功能和性能比FCKEditor更为强大和优越.记得07年的时候第一次接触FCKEd ...

  4. mybaits源码分析--自定义插件(七)

    一.MyBatis插件 插件是一种常见的扩展方式,大多数开源框架也都支持用户通过添加自定义插件的方式来扩展或者改变原有的功能,MyBatis中也提供的有插件,虽然叫插件,但是实际上是通过拦截器(Int ...

  5. 深入学习jQuery自定义插件

    原文地址:jQuery自定义插件学习 1.定义插件的方法 对象级别的插件扩展,即为jQuery类的实例增加方法, 调用:$(选择器).函数名(参数);      $(‘#id’).myPlugin(o ...

  6. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  7. BrnShop开源网上商城第四讲:自定义插件

    重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www.brnshop.com. 好了现在进入今天的 ...

  8. Qt之自定义插件(for Qt Designer)

    之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...

  9. BrnShop:自定义插件

    BrnShop开源网上商城第四讲:自定义插件 重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www ...

随机推荐

  1. Codevs 1961 躲避大龙

    1961 躲避大龙  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 你早上起来,慢悠悠地来到学校门口, ...

  2. bzoj3771: Triple(容斥+生成函数+FFT)

    传送门 咳咳忘了容斥了-- 设\(A(x)\)为斧头的生成函数,其中第\(x^i\)项的系数为价值为\(i\)的斧头个数,那么\(A(x)+A^2(x)+A^3(x)\)就是答案(于是信心满满的打了一 ...

  3. Spring pom.xml配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. HDU4035(概率期望、树形、数学)

    和ZOJ3329有些像,都是用期望列出来式子以后,为了解式子,设A[i],B[i],此题又多了C[i],然后用递推(此题是树形dp)去求得ABC,最后结果只跟ABC有关,跟列写的期望数组根本无关. 虽 ...

  5. linux下输出json字符串,用python格式化

    echo '{"name":"chen","age":"11"}' |python -m json.tool 如果是文件 ...

  6. dubbo-springboot

    一.服务提供者boot-user-service-provider 服务提供者boot-user-service-provider代码结构如下: 1.服务提供者boot-user-service-pr ...

  7. [已读]JavaScript模式

    主要是介绍各种继承和设计模式.第一章是讲编程规范,然后里面讲到了使用new Function替代eval

  8. React 实践记录 03 React router

    Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...

  9. 7.html超链接的使用

    <html> <head> <title>第七课网页标签</title> <meta charset="utf-8"> ...

  10. Jenkins怎么启动和停止服务

    笔者没有把Jenkins配置到tomcat中,每次都是用命令行来启动Jenkins.但是遇到一个问题:Jenkins一直是开着的,想关闭也关闭不了.百度了一些资料,均不靠谱(必须吐槽一下百度).于是进 ...