2013-03-22 5 views
8

अपडेट करते समय केंडो यूआई ग्रिड को कई बार पुनर्विचार से कैसे रोकें जब आप एमवीवीएम के साथ केंडो यूआई ग्रिड से जुड़ते हैं, तो डाटाबेस एक बार आग लग जाएगा और सब ठीक है। यदि आपको तथ्य के बाद उस डेटा को अपडेट करने की आवश्यकता है, हर बार जब आप किसी भी व्यूमोडेल (या बाल व्यूमोडेल) पर डेटा का एक टुकड़ा बदलते हैं, तो संपूर्ण ग्रिड पुनः डेटाबेस। इस प्रकार, यदि आपके पास ग्रिड में कुछ सेल है जो टेम्पलेट से जुड़ा हुआ है और आपको कुछ बाहरी AJAX स्रोत से व्यूमोडेल पर 2 या 3 गुणों को बदलना है, तो डाटाबेस प्रत्येक मॉडल के लिए 2 या 3 बार आग लग जाएगा, जिससे पुनर्जीवित करने के लिए पूरे देखने योग्य क्षेत्र। हम एक साथ कई सारे डेटा कैसे अपडेट कर सकते हैं और केवल एक बार डाटाबेस फायर कर सकते हैं?व्यूमोडल्स

उत्तर

9

आप ग्रिड को वास्तव में कैसे पुनर्जीवित करते हैं? मूल रूप से आप इस तरह मॉडलों के कुछ परिवर्तित करते हैं:

dataItem.set('SomeField','new value'); 
dataItem.set('someOtherField','other value'); 

इस तरह ग्रिड वास्तव में MVVM की वजह से दो बार बाध्य होंगे। प्रत्येक बार जब आप कॉल करते हैं तो परिवर्तन ईवेंट ट्रिगर होता है।

लेकिन अगर आप इस तरह मानों को अपडेट करता है, तो:

dataItem.SomeField='new value'; 
dataItem.someOtherField= 'other value'; 

ग्रिड अभ्यस्त परिवर्तन करने के लिए प्रतिक्रिया और अभ्यस्त rebind ताज़ा के माध्यम से मॉडल से मूल्यों को फिर से पढ़ आप यह करने के लिए मजबूर कर सकते हैं ग्रिड विधि।

$('#gridName').data().kendoGrid.refresh() 
+0

यह दृष्टिकोण तब तक ठीक काम करता है जब तक आप जानते हैं कि आप किस तत्व से बंधे हैं। यदि आप जिस डेटा को अपडेट कर रहे हैं वह एक से अधिक चीज़ों से जुड़ा हुआ है और इसे किसी प्रकार की लाइब्रेरी में अपडेट किया जा रहा है जहां आपको स्क्रीन तत्वों की परवाह नहीं है, इससे कुछ समस्याएं हो सकती हैं। यदि आप अंतिम आइटम की संपत्ति पर सेट() को कॉल करते हैं, तो आपको इसकी परवाह नहीं होगी कि इससे क्या बाध्य है। वे सभी अपडेट प्राप्त करेंगे। –

1

मुझे यकीन नहीं है कि घटनाओं को सुनना बंद करने के लिए अस्थायी रूप से ग्रिड को बताने का कोई तरीका है और फिर अंत में, एक बार फिर से सिंक करें। यदि ऐसा है, तो कृपया उस उत्तर को यहां दें! अन्यथा, मैंने इसके बजाय क्या किया है कि मैं प्रत्येक आइटम के लिए .set() से नहीं जाता था। इसके बजाय, मैंने डेटा को सीधे संपत्ति पर सेट करके सभी पंक्तियों के लिए डेटा अपडेट किया। तब जब मैं आखिरी पंक्ति में गया तो मैं अपडेट कर रहा था, मैंने अंतिम संपत्ति पर .set() को बुलाया जिसे अद्यतन करने की आवश्यकता थी। यह डाटाबेस को केवल एक बार आग लगने का कारण बनता है और संपूर्ण ग्रिड बदलकर सभी डेटा के साथ खुद को ताज़ा कर देगा। यदि आप इसे इस तरह से नहीं करते हैं, तो पृष्ठ पर प्रदर्शित होने वाली अधिक पंक्तियां, प्रक्रिया में जितनी अधिक समय लगती है। (उपयोगकर्ता फिर से कुछ भी कर सकता है इससे पहले 20+ सेकंड लग सकते हैं।)

+0

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

1

ऐसा लगता है कि डेटा बाइंडिंग ईवेंट है जहां आप ग्रिड पर रिबाइंड को रोक सकते हैं।

Telerik Online Docs

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