2015-02-04 14 views
6

साथ पुनः लोड jqGrid मैं इस साधारण समारोहनए डेटा

function createGrid(limit){ 
    $("#list").trigger("reloadGrid"); 
    $("#list").jqGrid({ 
     url:indexObj.gridUrl, 
     postData:{ 
      "limit":limit 
     }, 
     datatype: "json", 
     colNames:['ID','type','folder','Description'], 
     colModel:[ 
      {name:'id',index:'id', width:50}, 
      {name:'type',index:'type', width:100}, 
      {name:'folder_id',index:'folder_id', width:100}, 
      {name:'description',index:'description', width:200} 
     ] 
    }); 
} 

है मैं पहली बार सीमा = 1 से कॉल करने और इसे सर्वर कॉल करता है और सही डेटा देता है। फिर मैं इसे सीमा = 2 के साथ कॉल करता हूं और यह पिछले अजाक्स कॉल (सीमा = 1 के साथ) को फिर से चालू करता है और पाठ्यक्रम का वही डेटा देता है।

क्यों पोस्टडाटा वास्तव में नहीं बदलता है? मैं आग में देखता हूं कि "सीमा" का सही मूल्य है।

उत्तर

10

या जबकि पुन: लोड आप

$("#list").jqGrid('setGridParam', { 
     postData: {"limit":limit } 
}).trigger('reloadGrid'); 

postData रीसेट करने के लिए setGridParam उपयोग कर सकते हैं, और, यदि आप reinitialize/jqGrid बनाने की जरूरत नहीं है, लेकिन आप बस का उपयोग कर सकते हैं:

function createGrid(limit){ 
    $("#list").trigger("reloadGrid"); 
    #Code Goes here# 
} 
5

मुझे यकीन नहीं है कि डेटा की इस कैशिंग के साथ निर्माण अच्छा है, लेकिन फिर भी आपकी वर्तमान समस्या स्पष्ट है।

यह समझना महत्वपूर्ण है कि कॉल

$("#list").jqGrid({ 
    url:indexObj.gridUrl, 
    ... 
}); 

ग्रिड बनाता है महत्वपूर्ण है। यह divs और tables की जटिल संरचना में खाली <table id="list"></table> परिवर्तित करता है। तो कोई भी ग्रिड केवल बना सकता है।

ग्रिड में कई हिस्सों (हेडर जैसे) शामिल हैं जिन्हें ग्रिड के अगले भरने पर पुनर्निर्मित करने की आवश्यकता नहीं है। तो jqGrid reloadGrid ईवेंट प्रदान करता है जिसे पर ट्रिगर किया जा सकता है, ग्रिड के शरीर को फिर से भरें। यदि jqGrid

postData: { 
    limit: limitVar 
} 

जैसे कुछ मान के साथ postData है तो इसका मतलब है कि अगर postData की वस्तु मूल्य बनाया है और limitVar चर के वर्तमान मूल्य के साथ एक बार प्रारंभ कर दिया जाएगा। आप बाहरी चर है (वैश्विक, या कुछ बाहरी दायरे में परिभाषित) तो आप

postData: { 
    limit: function() { return limitVar; } 
} 

उपयोग कर सकते हैं मामले में आप URL के limit पैरामीटर का मान के रूप में वर्तमानlimitVar का मूल्य होगा। वैसे यदि उपयोगकर्ता कॉलम हेडर पर क्लिक करता है, तो ग्रिड को सॉर्ट किया जाना चाहिए और jqGrid url पर नया HTTP अनुरोध करेगा। यदि आप functionpostData के अंदर उपयोग करते हैं तो आपके पास के मामले में limitVar के मामले भी होंगे।

आप अपने मौजूदा कोड में कम संशोधन कर देगा तो आप यह गोते और तालिकाओं के पूर्व में बने संरचना को नष्ट कर देगा (

$("#list").jqGrid("GridUnload"); 

करने के लिए लाइन $("#list").trigger("reloadGrid"); (जो वर्तमान कोड में बिल्कुल अनावश्यक है) की जगह ले सकता जो ग्रिड का निर्माण करता है) और उसी स्थान पर एक खाली <table id="list"></table> बनाता है। तो आप ग्रिड को फिर से बना सकते हैं। ऐसा कोड इतना प्रभावी ढंग से काम नहीं करेगा, लेकिन यह कुछ परिदृश्यों में बहुत उपयोगी हो सकता है (उदाहरण के लिए the answer और this one देखें)।

+0

अजीब, मैं एक "jqGrid - ऐसी कोई विधि नहीं: ग्रिडउनलोड" $ ("# सूची") में त्रुटि। jqGrid ("GridUnload"); –

+0

@CoffeeCode: आपको jqGrid को लोड करना चाहिए जिसे आपने लोड किया था। शायद आपने [कस्टम] डाउनलोड किया है [http://www.trirand.com/blog/?page_id=6) और आपने ** कस्टम ** मॉड्यूल शामिल नहीं किया है (देखें [यहां] (https://github.com/tonytomov/jqGrid/blob/v4.7.0/js/grid.custom.js#L125))? मैं आपको बस 'jquery.jqGrid.src.js' शामिल करने की सलाह देता हूं। आप फ़ाइल को किसी भी टेक्स्ट एडिटर में खोल सकते हैं और 'ग्रिडउन्लोड' की खोज कर सकते हैं। – Oleg

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