2010-12-08 20 views
3

Dans une grille ExtJS, je peux obtenir l'index de l'élément de données sélectionné comme ceci:Comment obtenir les données d'une ligne qui a été double-cliquée dans une grille ExtJS?

grid.getSelectionModel().on('rowselect', function(sm, index, rec){ 
    changeMenuItemInfoArea(menuItemApplication, 'you are on row with index ' + index); 
    var row_number_parts = rec.id.split('-'); // rec.id = e.g. "ext-record-1" 
    var selected_index = row_number_parts[2] - 1; 
    alert(selected_index); 
}); 

Mais comment puis-je obtenir l'index de l'élément de données sélectionnées sur un double clic?

Quand je fais cela:

listeners: { 
    'rowdblclick': function(grid, rowindex, e){ 
     console.log(...); 
    } 
} 

à la fois grid et e ne semblent pas avoir l'information nécessaire et rowindex est pas utile, car si l'utilisateur a recours une colonne, puis l'indice de la La ligne double-cliqué n'est pas nécessairement l'index de l'ensemble de données qui a chargé la grille.

Addendum

Merci @McStretch, j'ai finalement résolu la question à l'en mettant l'id dans la liste des éléments, se cachant la colonne id, puis d'envoyer l'identifiant à la page d'édition, comme ceci:

listeners: { 
    'rowdblclick': function(grid, index, rec){ 
     var id = grid.getSelectionModel().getSelected().json[0]; 
     go_to_page('edit_item', 'id=' + id); 
    } 
} 

Répondre

9

indice fait référence à l'indice de l'enregistrement dans le magasin selon la documentation cellClick:

function(grid, rowIndex, columnIndex, e) { 
    // Get the Record, this is the point at which rowIndex references a 
    // record's index in the grid's store. 
    var record = grid.getStore().getAt(rowIndex); 

    // Get field name 
    var fieldName = grid.getColumnModel().getDataIndex(columnIndex); 
    var data = record.get(fieldName); 
} 

Si tel est le cas, vous ne devriez pas avoir à vous soucier de la réorganisation du réseau. Je pense que vous devriez obtenir l'index/enregistrement en utilisant la méthodologie ci-dessus dans votre écouteur 'rowdblclick' - c'est beaucoup plus lisible. Testez-le et voyez ce qui se passe.

-1

J'ai trouvé une façon de le faire:

listeners: { 
    'rowdblclick': function(grid, index, rec){ 
     var row_label = grid.getSelectionModel().getSelected().id; 
     var row_label_parts = row_label.split('-'); 
     var selected_index = row_label_parts[2] - 1; 
     alert(selected_index); 
    } 
} 
+4

Ne faites pas cela. L'index est correct, même après tri. Le tri est géré au niveau du magasin, de sorte que l'index correspondra entre le magasin et la grille. –

+0

merci, ce n'était pas clair ce que l'index fait référence à –