2012-10-26 13 views
14

मैं ग्रिड का उपयोग कर रहा हूं। सेनचा एक्स्टजेस 4.0.2 ए में पैनल और मैं हर 60 सेकंड में एक जेसन स्टोर पुनः लोड करता हूं।ExtJs grid.Panel store: लोड/रीलोड के बाद स्क्रॉलबार स्थिति रखें

मैं सोच रहा था कि डेटा लोड के बाद स्क्रॉलबार की स्थिति को संरक्षित करने का कोई तरीका है या नहीं।
ताकि उपयोगकर्ता रिकॉर्ड वह लोड से पहले देख रहा था को देखने के लिए जारी रख सकते हैं ..

मैं एक टास्क का उपयोग कर ग्रिड में डेटा को फिर से लोड:

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

डेटा लोड करने के बाद स्क्रॉलबार स्थिति शीर्ष पर रीसेट कर दी गई है ..

प्रश्न: डेटा लोड के बाद स्क्रॉलबार स्थिति को बनाए रखने का कोई तरीका है?

अग्रिम धन्यवाद!

उत्तर

17

ताज़ा करने पर स्क्रॉल स्थिति बनाए रखने के लिए यह बुरा लड़का का प्रयास करें: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.View-cfg-preserveScrollOnRefresh

यह मेरा ट्री दृश्य पर मेरे लिए काम करता है।

+0

अच्छा विचार @dbrin, आप viewConfig स्थापित करने के लिए viewConfig (आप gridpanel उपयोग कर रहे हैं के बाद से) conf उपयोग कर सकते हैं: अपने टेबल की: {सच preserveScrollOnRefresh} । –

+0

बहुत बहुत धन्यवाद!मैं जितनी जल्दी हो सके इसे (मुझे अपने ExtJS 4.0.2a को संस्करण 4.1 में अपग्रेड करना होगा) – zerologiko

7

यहां अपने ग्रिड में preserveScrollOnRefresh पर उपयोग करेगा:

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

    extend: 'Ext.grid.Panel', 

    viewConfig: { 
     preserveScrollOnRefresh: true 
    } 

यहाँ एक JSFiddle जो इस दर्शाता है:

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

लेकिन जब आप एक पंक्ति का चयन ऐसा प्रतीत नहीं होता काफी सही काम करने के लिए। मुझे यकीन नहीं है कि यह एक बग है।

'ताज़ा' घटना इस कोड से शुरू हो रहा है:

grid.store.loadData(dataToLoad); 

मैं किसी भी अन्य घटनाओं जिसकी वजह से 'ताज़ा'

अतिरिक्त नोट्स को गति प्रदान से अनभिज्ञ हूं:

  • मैं Ext.toolbar.Paging एक आवश्यकता के रूप में था। भले ही मैंने इसका उपयोग नहीं किया, फिर भी जब मैंने एक या एक से अधिक पंक्तियां चुनीं तो स्क्रॉल को संरक्षित कर दिया गया, इसलिए सुनिश्चित करें कि आप अपनी आवश्यकता से पेजिंग को हटा दें।
  • स्क्रॉल संरक्षित काम नहीं करता है अगर मैं एक ही समय में bufferedrenderer प्लगइन का उपयोग करता हूं।
  • tablePanel.getView()। FocusRow (रिक्रो) देखना भी दिलचस्प है, लेकिन bufferedrenderer के साथ भी काम नहीं करता है।
1

आप preserveScrollOnReload दृश्य config संपत्ति का उपयोग कर सकते हैं:

viewConfig: { 
    preserveScrollOnReload: true 
}, 
+0

नोटिस: यदि आप grid.store.load() बनाते हैं; preserveScrollOnReload काम नहीं करेगा! लेकिन grid.store.reload(); ग्रिड स्थिति काम करेगा और बचाएगा। –

संबंधित मुद्दे