在ExtJS 4.2中动态排序现有列
我有一个定义了模型的网格,但它应该只显示用户选择要查看的列,并按照用户选择的显示顺序显示 业务需求不是使用内置的列标题菜单对列进行排序/隐藏,也不是使用拖放功能对列进行排序,而是使用一个对话框,用户可以从“可用列”列表中选择“选定列”,也可以在其中设置列的显示顺序 我需要构建一个简单的方法,其中给定一个列dataindex数组,它应该只显示与数组匹配的列,并且以给定的顺序显示 为方便起见,这里有一个名为在ExtJS 4.2中动态排序现有列,extjs,extjs4.2,Extjs,Extjs4.2,我有一个定义了模型的网格,但它应该只显示用户选择要查看的列,并按照用户选择的显示顺序显示 业务需求不是使用内置的列标题菜单对列进行排序/隐藏,也不是使用拖放功能对列进行排序,而是使用一个对话框,用户可以从“可用列”列表中选择“选定列”,也可以在其中设置列的显示顺序 我需要构建一个简单的方法,其中给定一个列dataindex数组,它应该只显示与数组匹配的列,并且以给定的顺序显示 为方便起见,这里有一个名为setcolumnsreferences的方法,该方法给定一个网格和一组数据索引,它应该: 仅
setcolumnsreferences
的方法,该方法给定一个网格和一组数据索引,它应该:
看看网格重新配置方法 它将列列表作为参数,因此如果传递给setColumnPreferences的“columns”参数只是一个dataIndex,请找到一种方法将其转换为整个列。我已经使用for循环完成了这项工作。下面是一些让您开始学习的伪代码:
setColumnsPreferences : function(grid, columns) {
var columnArray = [];
for (column : columns) {
if (column == 'dataIndex1') {
columnArray.add({
dataIndex: column,
width: 100,
text: 'Column 1'
}
} else if (column == 'dataIndex2') {
columnArray.add({
dataIndex: column,
width: 100,
text: 'Column 2'
}
}
}
// When the column array is built
grid.reconfigure([],columnArray);
},
在网格初始化(使用任何列顺序)后,可以使用网格标题容器方法随意移动列。该方法接受fromIndex
和toIndex
参数
比方说,您有一个列数据索引数组作为配置:
/**
* Given a grid object and an array containing the data indexes
* of the columns that we want to display, this function should
* make the grid to display only the given columns, and in the
* order as they appear on the columns array
* @param {Ext.grid.Panel} grid
* @param {String[]} columnsConfiguration
*/
setColumnsPreferences: function(grid, columnsConfiguration) {
var gridView = grid.getView();
var headerContainer = gridView.getHeaderCt();
var columns = headerContainer.getGridColumns();
var columnsByDataIndex = {};
for (var i = 0; i < columns.length; i++)
{
// save columns by data index for easier access later on
var column = columns[i];
var dataIndex = column.dataIndex;
columnsByDataIndex[dataIndex] = column;
}
for (var newIndex = 0; newIndex < columnsConfiguration.length; newIndex++)
{
// Note that you have to start from the lowest new index
// If you don't, your columns will not be ordered propertly
var dataIndex = columnsConfiguration[newIndex];
// get column from prepared object
var column = columnsByDataIndex[dataIndex];
var oldIndex = column.getIndex();
// move column from old index to new index
headerContainer.move(oldIndex, newIndex);
}
// refresh grid view at the end to apply changes
gridView.refresh();
},
/**
*给定一个网格对象和一个包含数据索引的数组
*在要显示的列中,此函数应
*使网格仅显示给定的列,并在
*按列阵列上显示的顺序排列
*@param{Ext.grid.Panel}grid
*@param{String[]}列配置
*/
SetColumnsReferences:函数(网格、列配置){
var gridView=grid.getView();
var headerContainer=gridView.getHeaderCt();
var columns=headerContainer.getGridColumns();
var columnsByDataIndex={};
对于(var i=0;i
我收到你的建议了。唯一的问题是,除了dataIndex之外,我还有很多额外的配置和自定义呈现器,我不想一次又一次地创建它们。
/**
* Given a grid object and an array containing the data indexes
* of the columns that we want to display, this function should
* make the grid to display only the given columns, and in the
* order as they appear on the columns array
* @param {Ext.grid.Panel} grid
* @param {String[]} columnsConfiguration
*/
setColumnsPreferences: function(grid, columnsConfiguration) {
var gridView = grid.getView();
var headerContainer = gridView.getHeaderCt();
var columns = headerContainer.getGridColumns();
var columnsByDataIndex = {};
for (var i = 0; i < columns.length; i++)
{
// save columns by data index for easier access later on
var column = columns[i];
var dataIndex = column.dataIndex;
columnsByDataIndex[dataIndex] = column;
}
for (var newIndex = 0; newIndex < columnsConfiguration.length; newIndex++)
{
// Note that you have to start from the lowest new index
// If you don't, your columns will not be ordered propertly
var dataIndex = columnsConfiguration[newIndex];
// get column from prepared object
var column = columnsByDataIndex[dataIndex];
var oldIndex = column.getIndex();
// move column from old index to new index
headerContainer.move(oldIndex, newIndex);
}
// refresh grid view at the end to apply changes
gridView.refresh();
},