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 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
JS函数的几种定义方式分析
Dec 17 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
Jul 01 Javascript
CSS+jQuery实现简单的折叠菜单
Dec 20 Javascript
微信小程序实现折叠面板
Jan 31 Javascript
vue中使用gojs/jointjs的示例代码
Aug 24 Javascript
vue axios基于常见业务场景的二次封装的实现
Sep 21 Javascript
JS栈stack类的实现与使用方法示例
Jan 31 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
微信小程序下拉加载和上拉刷新两种实现方法详解
Sep 05 Javascript
使用vue构建多页面应用的示例
Oct 22 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
PHP文件下载类
2006/12/06 PHP
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
loading动画特效小结
2017/01/22 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
python判断windows系统是32位还是64位的方法
2015/05/11 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
python杀死一个线程的方法
2015/09/06 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
小小商店教学反思
2014/04/27 职场文书
出差报告范文
2014/11/06 职场文书
护士求职自荐信
2015/03/25 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电