2013-11-04 10 views
8

मैं ExtJS 4.1 का उपयोग कर रहा हूं। मैं दुकान से फ़िल्टर को हटाने के लिए स्टोर्स के clearFilter() का उपयोग कर रहा हूं। मैं filterBy विधि का उपयोग करके स्टोर में फ़िल्टर लागू कर रहा हूं। मैं उन सभी रिकॉर्डों को फ़िल्टर कर रहा हूं जहां नाम रोनाल्डो नहीं है।फ़िल्टरजे का उपयोग करके फिल्टर लागू होने पर ExtJs स्टोर से फिल्टर साफ़ करने का सबसे तेज़ तरीका()

फ़िल्टर साफ़ करने के बाद, मैं एक दृश्य लोड करता हूं जिसमें एक ग्रिड (स्टोर से जुड़ा हुआ) होता है। लेकिन जब मैं ग्रिड लोड करता हूं, तो भी मैं देख सकता हूं कि फ़िल्टर साफ़ नहीं किया गया है। स्टोर स्थानीय स्टोर है। मैंने स्टोर पर किसी भी समूह को लागू नहीं किया है। स्टोर केवल एक मॉडल का उपयोग कर रहा है।

myStore.filterBy(function (record) { 
    if (record.get('Name') != 'Ronaldo') { 
     return true; 
    } 
}); 

हालांकि यह सब ठीक काम कर रहा है, लेकिन जब मैं clearFilter() का उपयोग करके फिल्टर स्पष्ट, यह कुछ समय ले रहा है। filterBy() का उपयोग कर फ़िल्टर लागू होने पर फ़िल्टर पर फ़िल्टर को साफ़ करने के लिए कोई तेज़ \ बेहतर \ सही तरीका है?

+1

जब आप कहते हैं कि "यह" कुछ समय ले जा रहा है, क्या "यह" क्या है? दुकान? ग्रिड/डाटाव्यू? क्या आप दूरस्थ रूप से या स्थानीय रूप से फ़िल्टर कर रहे हैं? क्या आपके पास समूह लागू हैं? क्या आप clearFilter() पर ईवेंट दबा रहे हैं? और आपके स्टोर में कितने मॉडल उदाहरण हैं? इनमें से सभी या कुछ या इनमें से कोई भी आपके मुद्दे के लिए महत्वपूर्ण नहीं हो सकता है, लेकिन अधिक जानकारी के बिना कुछ भी सुझाव देना मुश्किल है, यह देखते हुए कि स्पष्टफिल्टर() बहुत तेज प्रक्रिया होनी चाहिए (स्रोत: http: //docs.sencha देखें। com/extjs/4.2.1/स्रोत/Store.html # Ext-data-Store-method-clearFilter) – existdissolve

उत्तर

11

जब आप clearFilter() का उपयोग करते हैं तो यह कोई फर्क नहीं पड़ता अगर आपने filterBy() या filter() का उपयोग किया था या फ़िल्टर स्टोर पर कॉन्फ़िगर किए गए थे।

  1. दुकान पर फिल्टर के संग्रह
  2. को मंजूरी दे दी है फ़िल्टर किए गए डेटा मूल (फ़िल्टर नहीं किए गए) डेटा जो एक स्नैपशॉट
  3. में जमा हो गया था साथ बदल दिया है:

    यहाँ क्या होता है जब आप फ़िल्टर साफ़ है

  4. "datachanged" और "ताज़ा" घटनाओं की दुकान पर निकाल दिया जाता है

ध्यान दें कि आप घटनाओं को दबा सकती हैं clearFilter(true) whi का उपयोग करके निकाल दिया जा करने के लिए यदि आप मौजूदा फ़िल्टर को साफ़ करने के बाद स्टोर को फिर से फ़िल्टर करना चाहते हैं तो ch उपयोगी हो सकता है।

दुकान के फिल्टर को साफ करने धीरे धीरे उसके बाद प्रदर्शन करते हैं तो यह शायद (आपके ग्रिड या जो भी आप के साथ दुकान का उपयोग कर रहे पर) लेआउट प्रक्रिया से संबंधित है जो कदम 3.

इसके अलावा docs का उल्लेख से शुरू हो रहा या source code

+0

यदि आपके पास 'remoteFilter = true' है, तो नया (unfiltered) डेटा प्राप्त करने में कुछ समय लगता है। –

+0

लिंक काम नहीं करते हैं। – Hari

+0

@ हरि मैंने लिंक को सही किया है, संकेत – matt

0

बस एक फोन:

myStore.reload(); 

जब भी आप filterBy का उपयोग कर एक फिल्टर सेट निकालना चाहते हैं।

+0

के लिए धन्यवाद, लेकिन यह स्टोर को फिर से लोड करेगा, जो वास्तव में अनावश्यक है जब आप स्थानीय फ़िल्टर को हटाना चाहते हैं। – MarthyM

3

heres मेरी सबसे अच्छा जवाब है, filterBy समारोह स्पष्ट करने के लिए:

myStore.filterBy(function (record) { 
       return true; 
     }); 

मैं सिर्फ था कि यह, आशा है कि इसकी मदद करने

+0

यह समस्या का सबसे आसान समाधान हो सकता है। मेरे पास combobox में उपयोग की जाने वाली दूरस्थ रूप से फ़िल्टर की गई दुकान है, लेकिन जब मैं इनपुट में कुछ टाइप करता हूं, तो मैं इसे स्थानीय रूप से फ़िल्टर करना चाहता हूं, इसलिए मैं 'store.filterBy() 'विधि का उपयोग कर रहा हूं। अगर मैंने 'clearFilter()' विधि का उपयोग किया है, तो मेरे रिमोट फ़िल्टर खो जाएंगे। – MarthyM

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