Comment trouver l'index des colonnes en utilisant dataIndex Extjs 4

Bien dans ExtJS 3, j'ai utilisé le code suivant:

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

J'ai essayé de le trouver sur les documents d'api, mais pas de chance … alors, comment est-il possible que je puisse trouver l'index de colonne de la grille par DataIndex de la colonne ou le nom d'en-tête de cette colonne.

Je suppose que vous devriez trouver l'index en itérant via grid.columns array et en comparant la propriété dataIndex de chaque colonne.

Exemple:

 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')); 

Vous pouvez utiliser la requête du composant:

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

Cela a pris du temps pour fonctionner – il ne semble pas y avoir d'exemple dans les documents. 😉

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

A répondu dans les forums sencha

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

Component Query peut être un peu lent et ne garantit qu'un seul résultat. Il est un peu plus rapide d'itérer sur le tableau des colonnes qui appartiennent à la grille.

Voici une fonction d'utilité statique simple qui fait le tour en utilisant un cadre 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 RowEditor = new Ext.grid.plugin.RowEditing({...}); RowEditor.editor.form.findField('Task'); 

La manière la plus standard d'obtenir une colonne par dataIndex serait:

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

Notez que cela renvoie une colonne (contrairement au nom de la fonction). C'est parce qu'un en-tête de grille dans ExtJS est en réalité un en-tête et un contenu de colonne.

Ext.grid.column.Column docs :

Cette classe spécifie la définition d'une colonne dans Ext.grid.Grid. Il englobe à la fois la configuration de l'en-tête de la grille et l'affichage des données dans la grille elle-même.

Voir aussi: getHeaderByDataIndex docs .