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 相关文章推荐
setTimeout和setInterval的深入理解
Nov 08 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
JavaScript 模块的循环加载实现方法
Dec 13 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
纯js实现html转pdf的简单实例(推荐)
Feb 16 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
Aug 17 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
Sep 12 Javascript
基于vue实现分页效果
Nov 06 Javascript
ES6/JavaScript使用技巧分享
Dec 14 Javascript
Vue+Express实现登录状态权限验证的示例代码
May 05 Javascript
javascript触发模拟鼠标点击事件
Jun 26 Javascript
js实现电灯开关效果
Jan 19 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 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
json字符串传到前台input的方法
2018/08/06 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
python如何修改装饰器中参数
2018/03/20 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
基于python实现对文件进行切分行
2020/04/26 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
正规的求职信范文分享
2013/12/11 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
医院党员公开承诺书
2014/08/30 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
端午节活动总结报告
2015/02/11 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
python 单机五子棋对战游戏
2022/04/28 Python