2012-10-26 16 views
14

Używam grid.Panel w Sencha ExtJs 4.0.2a i przeładowuję sklep Json co 60 sekund.Siatka ExtJs.Panel Store: zachowaj pozycję paska przewijania po załadowaniu/przeładowaniu

Zastanawiam się, czy istnieje sposób na zachowanie pozycji paska przewijania po załadowaniu danych.
tak, że użytkownik może nadal patrzeć na zapisach Patrzył przed obciążeniem ..

I przeładować dane w siatce przy użyciu zadanie:

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

po danych załadować pozycja paska przewijania jest resetowana do góry ..

P: Czy istnieje sposób na zachowanie pozycji paska przewijania po załadowaniu danych?

Z góry dziękuję!

Odpowiedz

17

Spróbuj tego złego chłopca, aby zachować pozycję przewijania na odświeżenie: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.View-cfg-preserveScrollOnRefresh

Działa to dla mnie na moim widoku drzewa.

+0

dobry pomysł @dbrin, można użyć viewConfig (ponieważ używasz gridpanel) conf ustawić viewConfig: {preserveScrollOnRefresh: true} od stolika . –

+0

Wielkie dzięki!Spróbuję go jak najszybciej (muszę uaktualnić ExtJS 4.0.2a do wersji 4.1) – zerologiko

7

Oto jak należałoby użyć preserveScrollOnRefresh w Grid:

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

    extend: 'Ext.grid.Panel', 

    viewConfig: { 
     preserveScrollOnRefresh: true 
    } 

Oto JSFiddle który demonstruje w ten sposób:

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

Jednak po wybraniu wiersza nie wydaje działać całkiem dobrze. Nie jestem pewien, czy to błąd.

do 'odświeżania' zdarzenie jest wywoływane z tego kodu:

grid.store.loadData(dataToLoad); 

jestem nieświadomy jakichkolwiek innych zdarzeń, które wyzwalają 'odświeżanie'

Dodatkowe uwagi:

  • I miał wymaganą wersję: Ext.toolbar.Paging. Mimo że go nie używałem, zepsuł on zachowanie przewijania, gdy miałem wybrany jeden lub więcej wierszy, więc upewnij się, że usuwasz stronicowanie ze swoich wymagań.
  • Zachowanie paska przewijania nie działa, jeśli używam wtyczki buforowanej do wypalania na stole w tym samym czasie.
  • tablePanel.getView(). FocusRow (recrow) jest również interesujący, ale również nie działa z buforowanym raportem.
1

Można użyć preserveScrollOnReload widok własność config:

viewConfig: { 
    preserveScrollOnReload: true 
}, 
+0

Uwaga: jeśli stworzysz grid.store.load(); preserveScrollOnReload nie działa! Ale grid.store.reload(); zadziała i zapisze pozycję siatki. –

Powiązane problemy