11

那么在 ExtJS 3 中,我使用了以下代码:

grid.getColumnModel().findColumnIndex("Tasks")

我尝试在 api 文档上找到它,但没有运气......所以我怎么可能通过列的 dataIndex 或该列的标题名称找到网格的列索引。

4

7 回答 7

32

您可以使用组件查询:

var fname = grid.down('[dataIndex=firstname]');

解决这个问题需要一段时间 - 文档中似乎没有示例。;-)

于 2013-03-03T02:06:06.907 回答
9

我想您应该通过遍历grid.columns数组并比较dataIndex每列的属性来找到索引。

例子:

var findColumnIndex = function(columns, dataIndex) {
    var index;
    for (index = 0; index < columns.length; ++index) {
        if (columns[index].dataIndex == dataIndex) { break; }
    }​​​​​​​​
    return index == columns.length ? -1 : index;
}


console.log(findColumnIndex(grid.columns, 'Task'));
console.log(findColumnIndex(grid.columns, 'Something'));
于 2012-12-06T12:14:54.963 回答
3

获取列的最标准方法dataIndex是:

var column = grid.columnManager.getHeaderByDataIndex('Tasks')

请注意,这确实返回一列(与函数名称相反)。这是因为 ExtJS 中的网格标题实际上既是标题又是列内容。

Ext.grid.column.Column 文档

此类指定 Ext.grid.Grid 内的列的定义。它包括网格标题配置以及在网格本身内显示数据。

另请参阅:getHeaderByDataIndex 文档

于 2017-06-07T17:08:51.207 回答
2
function getColumnIndex(grid, dataIndex) {
    gridDataIndices = Ext.Array.pluck(grid.columns, 'dataIndex');

return Ext.Array.indexOf(gridDataIndices, desireDataIndex);
}

在煎茶论坛中回答

于 2015-10-13T09:42:59.323 回答
0
 var gridColumns = grid.headerCt.getGridColumns();
 for (var i = 0; i < gridColumns.length; i++) {
   if (gridColumns[i].dataIndex == 'yourdataIndex') {
    alert(i);
   }  
 }
于 2012-12-06T13:04:25.303 回答
0

组件查询可能会有点慢,并且不能保证只有一个结果。仅遍历属于网格的列数组会更快一些。

这是一个简单的静态 util 函数,它使用 ext 框架来解决问题。

 findColumnDataIndex: function(columns, dataIndex) {
   var column = null;
   Ext.Array.each(columns, function(c) {
     if (c.dataIndex === dataIndex) {
       column = c;
       return false;
     }
   }, this);
   return column;
 }

使用此代码从您的网格面板实例中获取列

var columns = grid.headerCt.items.items,

于 2015-03-31T19:54:36.100 回答
0
var RowEditor = new Ext.grid.plugin.RowEditing({...});
    RowEditor.editor.form.findField('Task');
于 2015-10-05T14:29:59.253 回答