经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
ExtJs如何使用自定义插件动态保存表头配置(隐藏或显示)
来源:cnblogs  作者:阿xian  时间:2018/9/25 20:08:49  对本文有异议

关于保存列表表头的配置,一般我们不需要与后台交互,直接保存在 localStorage 中就能满足常规使用需求(需要浏览器支持)。

直接上代码,插件:

  1. 1 Ext.define('ux.plugin.ColumnCustom', {
  2. 2 alias: 'plugin.columnCustom',
  3. 3 xtype: 'columnCustom',
  4. 4 //初始化
  5. 5 init: function (gridPanel) {
  6. 6 var me = this;
  7. 7 me.owner = gridPanel;
  8. 8 //根据已有配置项设置表头状态
  9. 9 me.setColumnConfig(gridPanel);
  10. 10 gridPanel.on({
  11. 11 columnschanged: me.saveColumnConfig,
  12. 12 scope: me
  13. 13 });
  14. 14 },
  15. 15
  16. 16 setColumnConfig: function (gridPanel) {
  17. 17 var me = this,
  18. 18 xtype = gridPanel.getXType(),
  19. 19 currentColumnConfig = me.getCurrentColumnConfig(),
  20. 20 columnConfig = currentColumnConfig[xtype],
  21. 21 columns = gridPanel.getColumns();
  22. 22 if (!columnConfig) return;
  23. 23 columns.forEach(function (column) {
  24. 24 var dataIndex = column.config.dataIndex;
  25. 25 //只有常规列才有显式的dataIndex,序号列等非常规列应排除在外
  26. 26 if (!dataIndex) return;
  27. 27 column.setHidden(columnConfig[dataIndex]);
  28. 28 });
  29. 29 },
  30. 30 saveColumnConfig: function () {
  31. 31 var me = this,
  32. 32 gridPanel = me.owner,
  33. 33 currentColumnConfig = me.getCurrentColumnConfig(),
  34. 34 columns = gridPanel.getColumns(),
  35. 35 xtype = gridPanel.getXType(),
  36. 36 config = {};
  37. 37 columns.forEach(function (column) {
  38. 38 var dataIndex = column.config.dataIndex;
  39. 39 //只有常规列才有显式的dataIndex,序号列等非常规列应排除在外
  40. 40 if (!dataIndex) return;
  41. 41 config[dataIndex] = column.isHidden();
  42. 42 });
  43. 43 //使用xtype作为索引是相对可靠的做法
  44. 44 currentColumnConfig[xtype] = config;
  45. 45 //localStorage的值类型限定为string类型
  46. 46 localStorage.setItem('columnConfig', Ext.encode(currentColumnConfig));
  47. 47
  48. 48 },
  49. 49 getCurrentColumnConfig: function () {
  50. 50 var allColumnConfigString = localStorage.getItem('columnConfig'),
  51. 51 allColumnConfig = Ext.decode(allColumnConfigString, true);
  52. 52 return allColumnConfig || {};
  53. 53 }
  54. 54 });

如何使用:由于这是一个比较常规的需求,因此这里默认给所有的gridPanel配置此插件,并支持手动配置参数禁用之,考虑复写gridPanel类。

代码如下:

  1. Ext.define('override.grid.Panel', {
  2. override: 'Ext.grid.Panel',
  3. requires: ['ux.plugin.ColumnCustom'],
  4. columnCustomDisable: false,
  5. initComponent: function () {
  6. var me = this;
  7. me.callParent();
  8. //默认全部加上自动保存表头插件,此处追加一个可配属性来禁用此插件
  9. if (!me.columnCustomDisable) {
  10. me.addPlugin('columnCustom');
  11. }
  12. }
  13. });

 

以上。

  

  

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号