2013-03-26 2 views
9

पर्यावरण भेजे बिना लाने:केंडो डेटा स्रोत: स्थापित करने के लिए कैसे फिल्टर से पहले दो httprequests

  • केन्डो संस्करण: 2013.1.319
  • डेटा स्रोत:

    productsDataSource = new kendo.data.DataSource({ 
        type: "odata", 
        transport: { 
         read: "http://www.mydomain.com/odata.svc/products", 
         dataType: "json", 
         contentType: "application/json" 
        } 
        schema: { 
         type: "json", 
         data: function(data){ 
          return data.value; 
         }, 
         total: function(data){ 
          return data['odata.count']; 
         }, 
         model: product 
        }, 
        pageSize: 50, 
        serverPaging: true, 
        serverFiltering: true, 
        serverSorting: true 
    }); 
    
  • प्राप्त डेटा:

    productsDatasSource.filter ([{फ़ील्ड: "आईडी", ऑपरेटर: "eq", मान: 5}]); // इस एक HttpRequest भेज देंगे

    productsDataSource.fetch (समारोह (ई) { tempDataStorage = e.items; // डेटा के साथ काम कर के लिए और अधिक तर्क; });

  • समस्याओं: लाने डाटा प्रोसेसिंग (विगेट्स आरंभीकरण, डेटा बाइंडिंग ... आदि) के लिए डेटा स्रोत की विधि का उपयोग करने

    1. ज़रूरत नहीं है;
    2. लाने से पहले फ़िल्टर सेट करते समय दो httprequests भेजने से बचें;
    3. रनटाइम पर फिल्टर स्थिति को बदलने की आवश्यकता है।
+1

क्या तुमने कभी यह पता लगा था? – emragins

उत्तर

4

आप DataSource विन्यास में उपयोगकर्ता filter कर सकते हैं। इसे DataSource कॉन्फ़िगरेशन में निर्दिष्ट फ़िल्टरिंग स्थितियों के साथ केवल एक ही अनुरोध जारी करना चाहिए।

+0

हाय, समस्या यह है कि मुझे रनटाइम पर फ़िल्टर की स्थिति बदलनी है। कॉन्फ़िगरेशन केवल एक बार सेट किया जा सकता है, क्या मैं सही हूँ? – Dean

+0

जब भी आप चाहें 'datasource.read'' का उपयोग करके फ़िल्टर कॉन्फ़िगरेशन सेट करते हैं और जैसे ही आप एक नई फ़िल्टर स्थिति सेट करते हैं, केंडो यूआई नई स्थितियों के साथ 'transport.read' को आमंत्रित करता है। – OnaBai

+0

डेटा स्रोत में एकमात्र तरीका जिसमें कॉलबैक फ़ंक्शन है, इसलिए मैं इसे चुनता हूं। dataSource.data() डेटासोर्स.read() के बाद भी खाली है, यह एक समस्या बन जाती है क्योंकि मैं इसके बाद अपने विजेट को प्रारंभ नहीं कर सकता। क्या वैसे भी है कि मैं फ़ेच विधि को कॉल करने से पहले फ़िल्टर को रीसेट कर सकता हूं और httprequest स्वचालित रूप से नहीं भेजता (लाने से पहले)? धन्यवाद। – Dean

4
productsDataSource._filter = { logic: 'and', filters: [ 
{ field: "Id", operator: "eq", value: 5 }]}; 

मुझे यह काम करने के लिए मिला है। आंतरिक संपत्ति को पूर्ण फ़िल्टर ऑब्जेक्ट पर सेट करें। फिर आप बाद में लाने के लिए कॉल कर सकते हैं। हालांकि मुझे अभी तक एक फ़ेच ट्रिगर किए बिना पेज आकार बदलने का कोई तरीका नहीं मिला है।

3

productsDataSource._filter = [{ field: "Id", operator: "eq", value: 5 }]; का उपयोग कर डेटा स्रोत में _filter क्षेत्र सेट करें और फिर मैन्युअल रूप से दूरदराज के डेटा के लिए अनुरोध को आरंभ जब आप का उपयोग कर productsDataSource.read();

1

मैं _filter बदलने अनुशंसित नहीं है लगता है के लिए तैयार हैं। टेलीरिक की टीम को बाइंड ऑपरेशन से पहले फ़िल्टर सरणी में हेरफेर करने का बेहतर तरीका प्रदान करना चाहिए।

फ़िल्टर विधि दूसरे सर्वर ऑपरेशन का कारण बनती है, यह बिल्कुल अच्छा नहीं है।

अब के लिए, _filter को बदलना अद्वितीय समाधान प्रतीत होता है, लेकिन ध्यान दें, वे भविष्य में इस चर का नाम बदल सकते हैं और आप तब तोड़ सकते हैं।

+0

यह एक टिप्पणी की तरह दिखता है फिर सवाल का सीधा जवाब। –

+0

हाँ। मुझे लगता है कि इसके बारे में सावधान रहना महत्वपूर्ण है। –

0

डेटा ईवेंट करने के लिए बाइंड इवेंट श्रोता जो विजेट प्रारंभ करता है और फिर फ़िल्टर विधि का उपयोग करता है।

datasource.one('requestEnd', function(){ 
    // initialize or/and bind widget 
}); 
datasource.filter({ /*your filter*/ }) 
1

हालांकि यह एक पुराना सवाल है, यह Google परिणामों में आता है। तो भले ही मैं अगर यह केन्डो संस्करण के लिए मान्य है पता नहीं है: 2013.1.319, लेकिन वर्तमान में एक विधि

dataSource.query({ 
    sort: { field: "ProductName", dir: "desc" }, 
    page: 3, 
    pageSize: 20 
}); 

यह एक कॉल और रिटर्न में तरह, फिल्टर पेजिंग आदि जैसे कई विकल्प सेट कर सकते है एक वादा।

http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#methods-query

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