2011-03-22 17 views
5

मैं सबसे उत्कृष्ट jqGrid प्लगइन का उपयोग कर रहा हूं, और इस साइट पर खोज करके बहुत सारी मदद मिली है, लेकिन मुझे एक समस्या मिली है जिसे मैं हल नहीं कर सकता, या समाधान ढूंढ सकता हूं। यह मेरी पहली पोस्ट यहां होगी।jqGrid उन्नत खोज 'पहले खोज' विकल्प?

मैं अपने ग्रिड की कुछ खोज करने के लिए फ़िल्टर टूलबार का उपयोग कर रहा हूं। पिछली छोर की प्रकृति की वजह से मुझे बातचीत करने की आवश्यकता है, मैं jqGrid द्वारा प्रदान किए जाने वाले फ़िल्टर का उपयोग करने के लिए असहज हूं, और इसके बजाय सबमिट करने से पहले पोस्टडाटा को खोजना और संशोधित करने की आवश्यकता है। मैं इस तरह filterToolbar विकल्प "beforeSearch" के साथ ऐसा कर:

$("#SC_grid").jqGrid('filterToolbar', {stringResult: true, searchOnEnter: true, defaultSearch : "cn", beforeSearch: function() { 
      var postData = $("#SC_grid").jqGrid('getGridParam','postData'); 
      var newPostData = '1=1'; 
      var searchData = jQuery.parseJSON(postData.filters); 
      for (var iRule=0; iRule<searchData.rules.length; iRule++) { 
       newPostData = newPostData + " AND " + searchData.rules[iRule].field + " LIKE '%" + searchData.rules[iRule].data + "%' "; 
      } 
      $("#SC_grid").jqGrid('setGridParam',{postData: { filter: newPostData, filters: ''} }); 
      return false; 
}}); 

यह अच्छा काम करता है मुझे प्रस्तुत करने से पहले मेरी चयन के एक हिस्से का निर्माण करने के लिए। मैं भी उन्नत खोज का उपयोग उसी तरह करना चाहूंगा, लेकिन यह समझ नहीं सकता कि जमा करने से पहले POST को कैसे रोकें। पहले खोज() विकल्प अनुपलब्ध नहीं प्रतीत होता है, और बाद के शोशर्च या ऑनक्लोस विकल्पों में सही समय नहीं है। आगे बढ़ने के बारे में कोई सुझाव?

मार्क

+0

में आपका स्वागत है:

आप $.jgrid.defaults के लिए सम्मान के साथ समारोह के अपने डिफ़ॉल्ट कार्यान्वयन सेट कर सकते हैं आप अपने वेब साइट के कई ग्रिड पर beforeRequest या serializeGridData का एक ही कार्यान्वयन की आवश्यकता है पहला प्रश्न। प्रश्न के लिए मुझसे +1। थोड़े समय में मैं आपको समस्या हल करने के संभावित तरीके का वर्णन करने की कोशिश करूंगा। बाद में ... – Oleg

उत्तर

4

आप ठीक कह रहे हैं, jqGrid के उन्नत खोज के वर्तमान कार्यान्वयन beforeSearch की तरह किसी भी घटनाओं की जरूरत नहीं है। उन्नत खोज का नया संस्करण जो कि पूर्ण नए लिखित हैं, में onSearch विधि होगी जिसका उपयोग आप कर सकते हैं। beforeSearch जैसी विधि trigger("reloadGrid",[{page:1}]) से पहले निकाल दी जाएगी, लेकिन postData भरने के बाद।

filterToolbar की beforeSearch ताकि आप beforeSearch से true मूल्य वापस लौट कर खोज बंद कर सकते हैं एक और अधिक दिलचस्प सुविधा है। तो beforeSearch सत्यापन भूमिका निभा सकता है।

एक में मेरी old answer मैं एक सार्वभौमिक विधि जो सत्यापन या postData संशोधन के किसी भी प्रकार के लिए इस्तेमाल किया जा सकता का वर्णन किया। जवाब में मैं दिखाता हूं कि कैसे कोई jqGrid के reloadGrid ईवेंट हैंडलर को उपclass कर सकता है और यदि आवश्यक हो तो ग्रिड को फिर से लोड करना बंद कर देता है। The demo यह दिखाता है। वैसे ही यहां कोई भी डेटा का कोई अन्य संशोधन कर सकता है। यह दयालु है, लेकिन the answer बहुत खराब अनुक्रमित होगा और स्टैक ओवरफ्लो पर सबसे अधिक खोज पर शौकीन नहीं होगा। तो कोई इसे नहीं जानता।

सबमिट करने से पहले पोस्टडाटा को संशोधित करने के लिए आपको केवल की आवश्यकता है और ग्रिड रीलोडिंग को रोकने की आवश्यकता नहीं है। तो आप कम से कम दो मानक jqGrid घटनाओं का उपयोग कर समस्या को हल कर सकते हैं: beforeRequest और serializeGridData। आप दोनों में search (this.p.search के रूप में) और postData (this.p.postData के रूप में) पैरामीटर तक पहुंच सकते हैं। search पैरामीटर का मान सर्वर को _search के रूप में भेजा जाएगा और यदि कोई खोज/फ़िल्टरिंग विधि उपयोग की जाती है तो true पर सेट की जाएगी। तो ईवेंट हैंडलर से एक के अंदर आप this.p.postData संशोधित कर सकते हैं।

serializeGridData के अंदर आपके पास यह भी परिभाषित करने का एक तरीका है कि डेटा को संशोधित करने के लिए सर्वर को कौन सा डेटा भेजा जाएगा। लाभ यह है कि यदि आप अगली बार अगली खोज अनुरोध खोलेंगे (यदि आवश्यक हो तो संशोधित कर सकते हैं) अंतिम खोज अनुरोध।बहुत अच्छा के साथ stackoverflow पर

$.extend($.jgrid.defaults, { 
     datatype: 'json', // overwrite default value of any jqGrid parameter 
     serializeGridData: function(postData) { 
      // your implementation 
     } 
}); 
+1

इस विषय पर आपकी प्रतिक्रिया के लिए धन्यवाद। मैंने डेमो से बहुत कुछ सीखा है कि आप अपने उत्तरों के लिए बनाते हैं, और इसकी सराहना की जाती है। मुझे यकीन है कि मैं इस के माध्यम से आपके डेमो के साथ भी काम करने में सक्षम हूं। यदि सब कुछ विफल हो जाता है, तो यह जानना अच्छा होता है कि आगामी संस्करण इस समस्या से निपटने के लिए एक विधि जोड़ देगा। – driedger

+0

केवल स्तंभ पर चक्र का एक तरीका है जहां खोज सत्य है? – frabiacca

+0

@frabiacca: क्षमा करें, लेकिन मुझे समझ में नहीं आता कि आपका क्या मतलब है। आप किस चक्र का मतलब है? – Oleg

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