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


Posted in Javascript onSeptember 25, 2018

关于保存列表表头的配置,一般我们不需要与后台交互,直接保存在 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使用自定义插件动态保存表头配置(隐藏或显示),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用javascript实现给图片加链接
Aug 15 Javascript
客户端限制只能上传jpg格式图片的js代码
Dec 09 Javascript
js取模(求余数)隔行变色
May 15 Javascript
单击某一段文字改写文本颜色
Jun 06 Javascript
JS继承用法实例分析
Feb 05 Javascript
jQuery插件slides实现无缝轮播图特效
Apr 17 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
Nov 13 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
Mar 02 Javascript
基于ES6 Array.of的用法(实例讲解)
Sep 05 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
Oct 29 Javascript
Webpack的Loader和Plugin的区别
Nov 09 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
Sep 25 #Javascript
vue单页缓存方案分析及实现
Sep 25 #Javascript
Vue中对拿到的数据进行A-Z排序的实例
Sep 25 #Javascript
vue单页缓存存在的问题及解决方案(小结)
Sep 25 #Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
Sep 25 #Javascript
使用vue2.0创建的项目的步骤方法
Sep 25 #Javascript
vue解决一个方法同时发送多个请求的问题
Sep 25 #Javascript
You might like
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
js 数组去重的四种实用方法
2014/09/09 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
JS typeof fn === 'function' && fn()详解
2020/08/22 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android
Android中的Launch Mode详情
2022/06/05 Java/Android