Как найти индекс столбца с помощью dataIndex Extjs 4
В ExtJS 3 я использовал следующий код:
grid.getColumnModel().findColumnIndex("Tasks")
Я попытался найти его в api docs, но не повезло... так как возможно, что я могу найти индекс столбца сетки с помощью dataIndex столбца или заголовка этого столбца.
Ответы
Ответ 1
Я думаю, вы должны найти индекс, итерации через массив 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
Вы можете использовать запрос компонента:
var fname = grid.down('[dataIndex=firstname]');
Понадобилось некоторое время, чтобы это сделать - в документах не было примера.; -)
Ответ 3
function getColumnIndex(grid, dataIndex) {
gridDataIndices = Ext.Array.pluck(grid.columns, 'dataIndex');
return Ext.Array.indexOf(gridDataIndices, desireDataIndex);
}
ответил на форумах sencha
Ответ 4
Самый стандартный способ получить столбец dataIndex
:
var column = grid.columnManager.getHeaderByDataIndex('Tasks')
Обратите внимание, что это возвращает столбец (вопреки имени функции). Это связано с тем, что заголовок сетки в ExtJS на самом деле является заголовком и содержимым столбца.
Ext.grid.column.Column docs:
Этот класс определяет определение столбца внутри Ext.grid.Grid. Он включает в себя как конфигурацию заголовка сетки, так и а также отображение данных в самой сетке.
Смотрите также: getHeaderByDataIndex docs.
Ответ 5
var gridColumns = grid.headerCt.getGridColumns();
for (var i = 0; i < gridColumns.length; i++) {
if (gridColumns[i].dataIndex == 'yourdataIndex') {
alert(i);
}
}
Ответ 6
Компонентный запрос может немного замедлить работу и не гарантирует только один результат. Его немного быстрее, чтобы просто перебирать массив столбцов, принадлежащих к сетке.
Вот простая статическая утилита, которая выполняет трюк с помощью ext framework.
findColumnDataIndex: function(columns, dataIndex) {
var column = null;
Ext.Array.each(columns, function(c) {
if (c.dataIndex === dataIndex) {
column = c;
return false;
}
}, this);
return column;
}
Ответ 7
var RowEditor = new Ext.grid.plugin.RowEditing({...});
RowEditor.editor.form.findField('Task');