ExtJS 3では、次のコードを使用しました。
grid.getColumnModel().findColumnIndex("Tasks")
APIドキュメントで見つけようとしましたが、うまくいきませんでした...列のdataIndexまたはその列のヘッダー名でグリッドの列インデックスを見つけることができないのはなぜですか。
コンポーネントクエリを使用できます。
var fname = grid.down('[dataIndex=firstname]');
それを解決するのにしばらく時間がかかりました-ドキュメントに例がないようです。 ;-)
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'));
function getColumnIndex(grid, dataIndex) {
gridDataIndices = Ext.Array.pluck(grid.columns, 'dataIndex');
return Ext.Array.indexOf(gridDataIndices, desireDataIndex);
}
dataIndex
で列を取得する最も標準的な方法は、次のとおりです。
var column = grid.columnManager.getHeaderByDataIndex('Tasks')
これは列を返すことに注意してください(関数名とは異なります)。これは、ExtJSのグリッドヘッダーが実際にはヘッダーと列の両方のコンテンツであるためです。
このクラスは、Ext.grid.Grid内の列の定義を指定します。これには、グリッドヘッダーの構成と、グリッド自体のデータの表示の両方が含まれます。
var RowEditor = new Ext.grid.plugin.RowEditing({...});
RowEditor.editor.form.findField('Task');
var gridColumns = grid.headerCt.getGridColumns();
for (var i = 0; i < gridColumns.length; i++) {
if (gridColumns[i].dataIndex == 'yourdataIndex') {
alert(i);
}
}
コンポーネントクエリは少し遅くなる可能性があり、1つの結果のみを保証するものではありません。グリッドに属する列の配列を反復処理する方が少し高速です。
これは、extフレームワークを使用してトリックを実行する単純な静的util関数です。
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,