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 类与静态类的实现
Apr 01 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
Jun 26 Javascript
jQuery实现公告文字左右滚动的实例代码
Oct 29 Javascript
js控制不同的时间段显示不同的css样式的实例代码
Nov 04 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
node.js中的fs.appendFileSync方法使用说明
Dec 17 Javascript
js实现图片漂浮效果的方法
Mar 02 Javascript
js实现简单折叠、展开菜单的方法
Aug 28 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
Oct 28 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
JS一个简单的注册页面实例
Sep 05 Javascript
JavaScript Image对象实现原理实例解析
Aug 26 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防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
php显示页码分页类的封装
2017/06/08 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
python读取二进制mnist实例详解
2017/05/31 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
python实时监控logstash日志代码
2020/04/27 Python
浅谈python出错时traceback的解读
2020/07/15 Python
python如何绘制疫情图
2020/09/16 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
个人对照检查材料
2014/02/12 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
营销计划书范文
2015/01/17 职场文书
五一劳动节活动总结
2015/02/09 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
django中websocket的具体使用
2022/01/22 Python