2016-09-01 1 views
0

Ich habe ein gepuffertes, gruppierte Gitter und ich möchte eine bestimmte Zeile in die Ansicht scrollen (ich habe sowohl den Datensatz und den Datensatz/Zeile Index zur Hand).Scroll eine Reihe in programmierte Sicht in gepufferten Raster

ich versucht habe, die ohne Papiere

grid.getView().scrollRowIntoView(index) 

Das funktioniert aber nur in ungepufferten Gittern, weil es nennt

view.getRow(row) 

, die nur Zeilen zurück, die derzeit gemacht werden, nicht diejenigen, die nicht wiedergegeben werden .

Gibt es eine offizielle Funktion, die ich übersehen habe oder was kann ich noch tun, um zum richtigen Datensatz zu blättern?

Antwort

4

gepufferedRenderer Plugin hat eine Funktion scrollTo(recordIdx).

Es gibt keine Funktion in gridpanel oder gridview oder dataview die bufferedRenderer.scrollTo nennt, so dass ich denke, Sie getView().bufferedRenderer.scrollTo von Ihrem Gitter direkt anrufen müssen.

Update: Bitte beachten Sie, dass scrollTo nicht aufgerufen werden kann, wenn der Speicher leer ist, da dies einen Fehler im Framework verursacht. Grund ist, dass scrollTo den Rekordindex nimmt; Wenn der Index unter 0 liegt, wird er auf 0 gesetzt, wenn es store.Count() oder größer ist, wird es auf store.Count() - 1 gesetzt (was -1 ist, wenn der Speicher leer ist). Dann wird der Datensatz abgerufen aus dem Speicher (getAt(index)), die null zurück, wenn und nur wenn der Speicher leer ist, und dann wird geprüft, dass der Datensatz ist in der Tat ein Modell:

if(record.isModel) 

, die dann den Fehler verursacht

Uncaught TypeError: Cannot read property 'isModel' of null

Also muss man immer prüfen, ob der Speicher nicht leer ist scrollTo vor dem Aufruf:

if(view.store.getCount()) view.bufferedRenderer.scrollTo(index); 
2

die Frage ist gecrosspostet worden Forum in Sencha, where Gary Schlosberg of the Sencha Support team antwortete:

Have you tried the ensureVisible config? The callback option mentions usage with a BufferedStore.

+0

Es ist keine Konfiguration, es ist ein Call-Methode - aber es funktioniert perfekt. Fügen Sie einfach einen solchen Code einem Load-Ereignishandler für Ihr Geschäft hinzu: 'var selection = grid.getSelection(); if (selection && selection.length> 0) grid.ensureVisible (Auswahl [0]); ' Dann können Sie jederzeit sicher sein, dass der ausgewählte Datensatz sichtbar ist. –