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

直接上代码,插件:

前端精品教程:百度网盘下载

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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类。

代码如下:

前端精品教程:百度网盘下载

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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');
    }
  }
});

转载于:https://www.cnblogs.com/zanguixuan/p/9811180.html

ExtJs使用自定义插件动态保存表头配置(隐藏或显示)相关推荐

  1. ExtJS 表格自定义列-动态widget

    一.需求: 表格中根据数据不同,动态渲染出不同的组件. 二.环境: 1.操作系统: Microsoft Windows 10 专业版 2.OS 版本:          10.0.14393 暂缺 B ...

  2. 动态切换父元素隐藏和显示里面的子元素的动画会再一次执行吗?

    代码: 完整代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  3. arcgis前端(3)----->基础篇--自定义地图优化/隐藏or显示子图层

    arcgis前端(3)----->基础篇–自定义地图优化/隐藏or显示子图层 文章目录 arcgis前端(3)----->基础篇--自定义地图优化/隐藏or显示子图层 前言 实现效果展示 ...

  4. android插件做动态权限,Mui本地打包笔记(四)Android自定义插件的配置(以动态申请权限为例)...

    通过自定义插件方式实现Android平台的动态申请权限功能 在上一章中完成了在Mui中调用Android原生的动态权限请求功能(Android动态申请权限的问题).虽然说完成了功能,但是在使用上并不是 ...

  5. Android 自定义ToggleButton+用SharedPreferences保存用户配置

    布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:i ...

  6. vue element-ui自定义表头,动态添加表头,新增行、新增列、删除行、删除列

    vue element-ui表格怎样自定义表头,动态添加表头,新增行.新增列.删除行.删除列 需求描述 1.自定义表头,表头里插入输入框 2.默认初始化几行几列占位 3.新增行 4.新增列 5.右键点 ...

  7. log4j2自定义appender插件源码、配置及采坑说明

    本篇为扩展appender标签,如果需要扩展filer.marker等其他的log4j2提供的扩展方式,可以查看相关的文档: 中文文档:https://www.docs4dev.com/docs/zh ...

  8. 写过Mybatis插件?那说说自定义插件是如何加载的吧?

    大多数框架,都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外. 我们从插件配置.插件编写.插件运行原理.插件注册与执行拦截的时机.初始化插件.分页插件的原理等六个方面展开阐述. 1 ...

  9. 美团一面:你既然写过Mybatis插件,能给我说说它底层是怎么加载一个自定义插件的吗?...

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 大多 ...

  10. 【Gazebo入门教程】第六讲 控制器插件的编写与配置(下)

    [Gazebo入门教程]第六讲 控制器插件的编写与配置(下) \qquad 文章目录 [Gazebo入门教程]第六讲 控制器插件的编写与配置(下) 一.系统插件 二.Velodyne传感器插件 1. ...

最新文章

  1. Linux中的简单文本处理
  2. 使用Oracle 的 imp ,exp 命令实现数据的导入导出
  3. Java日志框架-Logback手册中文版以及官方配置文档教程
  4. 【sql】牛客网练习题 (共 61 题)
  5. 数据结构——基于字符串模式匹配算法的病毒感染检测
  6. strings命令(Win、Linux均可适用)
  7. php及时获取zabbix告警,zabbix邮件告警python脚本代码
  8. python基础——可变长参数
  9. 递归,递推,记忆化搜索,空间优化(数字三角形)
  10. 三、 复杂对象类型的WebService
  11. Lintcode203 Segment Tree Modify solution 题解
  12. 黑客编程入门 之 网络编程入门
  13. CSS-背景 超链接
  14. html 语音识别输入法,9种外语语音识别 搜狗输入法成国内支持语种最多输入法...
  15. VBA 获取最大行数和最大列数
  16. 标题中间有虚线或横线,并且居中,而且标题字数不固定
  17. 开关控制灯实验C语言编程,指示灯开关控制器实验.doc
  18. 深度学习基础知识点归纳总结
  19. windows安装虚拟机(VMware)
  20. mybatis批量更新数据三种方法效率对比

热门文章

  1. jmeter无法启动的解决办法
  2. emacs org-mode 常用命令
  3. Webform(分页、组合查询)
  4. 统计字符串出现的次数(参照传智播客视频)
  5. java之接口适配器
  6. Android Studio单元测试入门
  7. C#处理Json文件
  8. jquery mini下载_【福利】iPhone 12 Pro Maxamp;mini预售开始啦!
  9. Linux 网络配置 修改DNS配置文件/etc/resolv.conf后,重启网络,DNS配置丢失
  10. Allegro16.6导出位号图