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 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 11 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
别了 JavaScript中的isXX系列
Aug 01 Javascript
使用javascript做的一个随机点名程序
Feb 13 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
DOM 事件的深入浅出(一)
Dec 05 Javascript
基于AngularJS实现的工资计算器实例
Jun 16 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
Sep 19 Javascript
微信小程序实现滑动切换自定义页码的方法分析
Dec 29 Javascript
使用JavaScript解析URL的方法示例
Mar 01 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 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
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
2016/10/26 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
JavaScript Chart 插件整理
2010/06/18 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
Python贪心算法实例小结
2018/04/22 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
闭幕式主持词
2014/04/02 职场文书
数据保密承诺书
2014/06/03 职场文书
本科毕业生求职信
2014/06/15 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
Python测试框架pytest高阶用法全面详解
2022/06/01 Python
使用Django框架创建项目
2022/06/10 Python