關於保存列表表頭的配置,一般我們不需要與後臺交互,直接保存在 localStorage 中就能滿足常規使用需求(需要瀏覽器支持)。 直接上代碼,插件: 如何使用:由於這是一個比較常規的需求,因此這裡預設給所有的gridPanel配置此插件,並支持手動配置參數禁用之,考慮覆寫gridPanel類。 代 ...
關於保存列表表頭的配置,一般我們不需要與後臺交互,直接保存在 localStorage 中就能滿足常規使用需求(需要瀏覽器支持)。
直接上代碼,插件:
1 Ext.define('ux.plugin.ColumnCustom', { 2 alias: 'plugin.columnCustom', 3 xtype: 'columnCustom', 4 //初始化 5 init: function (gridPanel) { 6 var me = this; 7 me.owner = gridPanel; 8 //根據已有配置項設置表頭狀態 9 me.setColumnConfig(gridPanel); 10 gridPanel.on({ 11 columnschanged: me.saveColumnConfig, 12 scope: me 13 }); 14 }, 15 16 setColumnConfig: function (gridPanel) { 17 var me = this, 18 xtype = gridPanel.getXType(), 19 currentColumnConfig = me.getCurrentColumnConfig(), 20 columnConfig = currentColumnConfig[xtype], 21 columns = gridPanel.getColumns(); 22 if (!columnConfig) return; 23 columns.forEach(function (column) { 24 var dataIndex = column.config.dataIndex; 25 //只有常規列才有顯式的dataIndex,序號列等非常規列應排除在外 26 if (!dataIndex) return; 27 column.setHidden(columnConfig[dataIndex]); 28 }); 29 }, 30 saveColumnConfig: function () { 31 var me = this, 32 gridPanel = me.owner, 33 currentColumnConfig = me.getCurrentColumnConfig(), 34 columns = gridPanel.getColumns(), 35 xtype = gridPanel.getXType(), 36 config = {}; 37 columns.forEach(function (column) { 38 var dataIndex = column.config.dataIndex; 39 //只有常規列才有顯式的dataIndex,序號列等非常規列應排除在外 40 if (!dataIndex) return; 41 config[dataIndex] = column.isHidden(); 42 }); 43 //使用xtype作為索引是相對可靠的做法 44 currentColumnConfig[xtype] = config; 45 //localStorage的值類型限定為string類型 46 localStorage.setItem('columnConfig', Ext.encode(currentColumnConfig)); 47 48 }, 49 getCurrentColumnConfig: function () { 50 var allColumnConfigString = localStorage.getItem('columnConfig'), 51 allColumnConfig = Ext.decode(allColumnConfigString, true); 52 return allColumnConfig || {}; 53 } 54 });
如何使用:由於這是一個比較常規的需求,因此這裡預設給所有的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'); } } });
以上。