2010-05-21 3 views
5

Hey, je dois être capable de faire défiler ma grille ExtJS vers la sélection actuelle, mais je n'ai aucune idée de comment faire cela. Je suis tombé sur une référence dans un forum à une méthode EnsureVisible mais je ne trouve aucune information. Quelqu'un peut-il faire des suggestions? MerciFaites défiler jusqu'à la sélection dans une grille ExtJS

Répondre

1

Désolé, je suis vraiment bête. J'ai juste essayé EnsureVisible et cela fonctionne très bien.

+0

Avez-vous été en mesure d'obtenir ce travail avec ExtJS 4.0? –

+0

@Erik Allik - Nous utilisons ExtJS 3.4. Je serais surpris si cela ne fonctionnait pas dans 4.0. – dave

9

Malheureusement, EnsureVisible() a été supprimé de ExtJS 4. La solution la plus simple que j'ai trouvée est d'utiliser scrollIntoView(). Dans mon cas, c'était après avoir sélectionné la ligne en fonction d'une valeur que j'ai chargée.

var rowIndex = store.find('fieldName', value); 
grid.getSelectionModel().select(rowIndex); 
Ext.fly(grid.getView().getNode(rowIndex)).scrollIntoView(); 

Ceci affichera la ligne sélectionnée au bas de la grille. Plus de travail devra être fait pour l'avoir en haut ou au milieu de la grille.

+0

Merci pour les commentaires. – dave

+1

Vous devriez utiliser un élément fly pour des opérations comme 'Ext.fly (grid.getView(). GetNode (rowIndex)). ScrollIntoView();' –

+0

Bon point Juan, je l'ai mis à jour. – CTarczon

4

Cela semble également travailler:

grid.getView().getRow(rowIdx).scrollIntoView(); 
+0

Merci! Cela a fonctionné pour moi ... –

9

Cela semble également travailler:

grid.getView().focusRow(rowIdx); 
3

Cela semble également travailler

grid.getView().getNode(rowIndex).scrollIntoViewIfNeeded(); 

En cas de ExtJs 4.X Non besoin d'utiliser Ext.fly

+0

scrollIntoViewIfNeeded() ne fonctionne pas dans IE9 + –

+1

'IE mal', scrollIntoViewIfNeeded() fonctionne en chrome, S'il vous plaît se référer réponse par @bhuvaneswari pour IE, aussi 'scrollIntoView()' donne un comportement étrange si vous êtes en utilisant des fenêtres modales –

1

Pour vous épargner beaucoup de cheveux en tirant, vous devez savoir que les solutions dans ce fil pour le défilement dans la vue pas travailler si la grille bufferedRenderer est activée.

Je crois savoir que dans Ext JS 5, bufferedRenderer est activé par défaut.

Il m'a fallu quelques heures avant de m'en rendre compte.

grid.getView(). GetNode (rowIndex) renvoie NULL si la ligne indexée est en dehors des lignes mises en mémoire tampon.

1

Travaillé pour moi sur ExtJS 6, même avec bufferedRenderer activé.

 var record = grid.getSelectionModel().selected.getRange()[0]; 
     grid.getView().focusRow(record); 
0

En 4.2 au moins, en utilisant scrollIntoViewIfNeeded échoue si vous êtes hors de la plage dans un tampon bufferedRenderer. Le bufferedRenderer a une méthode scrollTo pratique pour vous aider dans cette tâche si:

grid.getView().bufferedRenderer.scrollTo(index, true); 

Fait défiler à et sélectionne optionlly l'index de ligne spécifié dans l'ensemble de données totale.

http://docs.sencha.com/extjs/4.2.0/#!/api/Ext.grid.plugin.BufferedRenderer-method-scrollTo

Questions connexes