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 相关文章推荐
JS 日期验证正则附asp日期格式化函数
Sep 11 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
Dec 26 Javascript
js关闭当前页面(窗口)的几种方式总结
Mar 05 Javascript
非html5实现js版弹球游戏示例代码
Sep 22 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
PassWord输入框代码分享
Jun 07 Javascript
JavaScript模块化之使用requireJS按需加载
Apr 12 Javascript
vue-router路由与页面间导航实例解析
Nov 07 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 jQuery
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
Vue实现简易计算器
Feb 25 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
Apr 27 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
python 全文检索引擎详解
2017/04/25 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
后勤工作职责
2013/12/22 职场文书
施工协议书范本
2014/04/22 职场文书
研发工程师岗位职责
2014/04/28 职场文书
幼儿评语大全
2014/04/30 职场文书
学生犯错保证书
2015/05/09 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
redis复制有可能碰到的问题汇总
2022/04/03 Redis