如何使用dataIndex Extjs 4查找列索引

时间:2012-12-06 11:31:36

标签: javascript extjs extjs4

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

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

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

7 个答案:

答案 0 :(得分:30)

您可以使用组件查询:

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

这需要一段时间才能完成 - 在文档中似乎没有一个例子。 ; - )

答案 1 :(得分:8)

我猜你应该通过迭代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'));

答案 2 :(得分:2)

function getColumnIndex(grid, dataIndex) {
    gridDataIndices = Ext.Array.pluck(grid.columns, 'dataIndex');

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

answered in sencha forums

答案 3 :(得分:1)

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

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

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

Ext.grid.column.Column docs

  

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

另请参阅:getHeaderByDataIndex docs

答案 4 :(得分:0)

 var gridColumns = grid.headerCt.getGridColumns();
 for (var i = 0; i < gridColumns.length; i++) {
   if (gridColumns[i].dataIndex == 'yourdataIndex') {
    alert(i);
   }  
 }

答案 5 :(得分:0)

组件查询可能会变慢,并且不会保证只有一个结果。只需迭代属于网格的列数组就可以快一点。

这是一个简单的静态util函数,它使用ext框架来完成这个技巧。

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

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

&#13;
&#13;
var columns = grid.headerCt.items.items,
&#13;
&#13;
&#13;

答案 6 :(得分:0)

var RowEditor = new Ext.grid.plugin.RowEditing({...});
    RowEditor.editor.form.findField('Task');