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学习笔记7 原型链的原理
Jan 11 Javascript
JavaScript入门之基本函数详解
Oct 21 Javascript
关于js new Date() 出现NaN 的分析
Oct 23 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
jquery绑定事件不生效的解决方法
Feb 11 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
javascript每日必学之封装
Feb 23 Javascript
浅谈js基本数据类型和typeof
Aug 09 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
Bootstrap导航条学习使用(一)
Feb 08 Javascript
解决Vue页面固定滚动位置的处理办法
Jul 13 Javascript
jQuery实现合并表格单元格中相同行操作示例
Jan 28 jQuery
解决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实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
PHP中SESSION过期设置
2021/03/09 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
python和opencv实现抠图
2018/07/18 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
印度在线杂货店:bigbasket
2018/08/23 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
某同学的自我鉴定范文
2013/12/26 职场文书
竞聘自述材料
2014/08/25 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
为自己工作观后感
2015/06/11 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
logback 实现给变量指定默认值
2021/08/30 Java/Android
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers