2012-10-26 14 views
14

Uso la griglia .Pannello in Sencha ExtJs 4.0.2a e ricarico un Json Store ogni 60 secondi.Griglia ExtJs.Pannello negozio: mantenere la posizione della barra di scorrimento dopo il caricamento/ricarica

mi chiedevo se esiste un modo per mantenere la posizione della barra di scorrimento dopo il caricamento dei dati.
modo che l'utente può continuare a guardare ai record che stava cercando prima che il carico ..

ho ricaricare i dati nella griglia utilizzando un task:

var task = { 
    run: function(){ 
     Ext.getCmp(panelGridId).getStore().load({ 
      //Callback function after loaded records 
      callback: function(records) { 
       //Hide grid if empty records 
       if (Ext.isEmpty(records)) { 
        Ext.getCmp(panelGridId).setVisible(false); 
       } 
       else { 
        if (Ext.getCmp(panelGridId).isHidden()) { 
         Ext.getCmp(panelGridId).setVisible(true); 
         Ext.getCmp(panelGridId).doComponentLayout(); 
        } 
       } 
      } 
     }); 
    }, 
    interval: 60000 //60 seconds 
}; 

Ext.TaskManager.start(task); 

Dopo che i dati di carico del la posizione della barra di scorrimento viene ripristinata in alto ..

Q: C'è un modo per mantenere la posizione della barra di scorrimento dopo il caricamento dei dati?

Grazie in anticipo!

risposta

17

Prova questo cattivo ragazzo di preservare la posizione di scorrimento su Aggiorna: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.View-cfg-preserveScrollOnRefresh

Questo funziona per me, sul mio vista ad albero.

+0

buona idea @dbrin, è possibile utilizzare viewConfig (dal momento che si sta utilizzando gridpanel) conf per impostare viewConfig: {preserveScrollOnRefresh: true} della vostra tavola . –

+0

Grazie mille!Lo proverò appena possibile (Ho bisogno di aggiornare il mio ExtJS 4.0.2a alla versione 4.1) – zerologiko

7

Ecco come si usa preserveScrollOnRefresh in griglia:

Ext.define('js.grid.MyGrid', { 

    extend: 'Ext.grid.Panel', 

    viewConfig: { 
     preserveScrollOnRefresh: true 
    } 

Ecco un JSFiddle che dimostra questo:

http://jsfiddle.net/cdbm6r0o/7/

Tuttavia, quando si seleziona una riga non sembra lavorare abbastanza bene. Non sono sicuro che questo sia un bug.

L'evento 'aggiornamento' è innescato da questo codice:

grid.store.loadData(dataToLoad); 

Sono a conoscenza di tutti gli altri eventi che generano un 'aggiornamento'

Note aggiuntive:

  • I aveva il Ext.toolbar.Paging come richiedono. Anche se non l'ho usato, ha rovinato la salva di scorrimento quando ho selezionato una o più righe, quindi assicurati di rimuovere il Paging dalle tue necessità.
  • Il rotolo preservare non sembra funzionare se uso il bufferedrenderer plug-in sul tavolo, allo stesso tempo.
  • tablePanel.getView(). FocusRow (recrow) è anche interessante da guardare, ma non funziona con bufferedrenderer.
1

È possibile utilizzare la proprietà di configurazione preserveScrollOnReload vista:

viewConfig: { 
    preserveScrollOnReload: true 
}, 
+0

Avviso: che se si effettua grid.store.load(); preserveScrollOnReload non funzionerà! Ma grid.store.reload(); funzionerà e salverà la posizione della griglia. –

Problemi correlati