2012-08-08 15 views
25

मैं बहुत उलझन में हूं कि मुझे grep ऑब्जेक्ट के लिए() नीचे() और Ext.getCmp (ID) के बीच उपयोग करने की आवश्यकता है।ऊपर() और नीचे() बनाम Ext.getCmp()

मेरे लिए, यह आसान है कि ऑब्जेक्ट को ऑब्जेक्ट को परिभाषित करें और ऑब्जेक्ट को Ext.getCmp ('ID') द्वारा पुनर्प्राप्त करें और कोड अधिक साफ दिखता है।

उदाहरण के लिए:

console.log(this.up('panel').up('panel').down('grid')); 
console.log(Ext.getCmp('myPanel')); 

जो एक प्रदर्शन के लिए बेहतर है?

+0

getCmp शायद प्रदर्शन के लिए बेहतर है। यदि आप getCmp का उपयोग करने वाले हैं तो आपको यूयूआईडी का उपयोग करना चाहिए। प्रदर्शन सब कुछ नहीं है। –

उत्तर

34

आईडी का उपयोग करने और आपके घटकों को खोजने के लिए getCmp के साथ गंभीर गठिया हैं। प्राथमिक मुद्दा यह है कि आप घटक को सुरक्षित रूप से पुन: उपयोग नहीं कर सकते हैं क्योंकि ज्यादातर मामलों में मार्कअप HTML तत्वों को डुप्लिकेट आईडी के साथ बनाएगा, जो अवैध HTML है। इसके अतिरिक्त, जब आपके पास एक ही आईडी के साथ दो घटक होते हैं तो आप अप्रत्याशित व्यवहार में भाग लेंगे जो ट्रैक करना मुश्किल है क्योंकि ढांचे को आपके घटकों का सही संदर्भ नहीं मिलेगा।

इस पर कई ब्लॉग और फोरम पोस्ट हैं, साथ ही जे। गार्सिया द्वारा एक वीडियो इस विषय को कवर करता है। GetCmp का उपयोग करने का सुझाया गया तरीका उत्पादन-तैयार कोड के लिए केवल अन्य विधियों (ऊपर, नीचे, refs, itemId, और ComponentQuery) पर स्विच करने के लिए डिबगिंग के लिए है।

+8

क्या मैं एक विरोधाभासी दृश्य दे सकता हूं: मुझे लगता है कि 'आईडी' के बगल में शब्दों को 'घटक पुन: उपयोग' और 'एक ही आईडी के साथ दो घटक' डालना अजीब है - यह कई बार चिल्लाया गया है कि एक आईडी अद्वितीय होना चाहिए। मैं उन लोगों में से एक हूं जो डोम की तरह दिखता है, इसलिए बहुत सारे आईडी और आइटम आईडी हैं जो ऑटो-जेनरेटेड आईडी प्राप्त नहीं करते हैं।मुझे लगता है कि एक्स्टजेस का उपयोग करने वाला तथ्य गोरिल्ला-शैली डीओएम का मतलब नहीं होना चाहिए। – Izhaki

+2

भले ही यह स्वीकार्य उत्तर है और दूसरों के लाभ के लिए, मुझे लगता है कि प्रश्न का शीर्षक कुछ ऐसा होना चाहिए जैसे 'क्या मुझे एक्स्टजेस के साथ आईडी का उपयोग करना चाहिए या नहीं।' मैं इंप्रेशन के तहत था कि प्रदर्शन मुख्य सवाल था। – Izhaki

+1

Izhaki, मैं उपयुक्त 'आईडी' के अपने 'न्यायिक' उपयोग से सहमत हूं। मैं व्यूपोर्ट घटकों के मूल लेआउट के लिए स्वयं का उपयोग करता हूं। लेकिन सवाल देखें - बहुत से लोग घटक आईडी और डीओएम और एप्लिकेशन व्यवहार पर उनके प्रभाव का उपयोग करने के निहितार्थ को नहीं समझते हैं। – dbrin

15

Ext.getCmp() आंतरिक रूप से हैश मानचित्र का उपयोग करता है, इसलिए यह तेजी से प्रकाश डाल रहा है, लगभग एक कुंजी के आधार पर किसी सरणी में मान को पुनर्प्राप्त करने के रूप में तेज़ी से।

.up() और down() घटक पदानुक्रम के एक ट्रैवर्सल का उपयोग करके कार्यान्वित किया जाता है, जो धीमी प्रक्रिया है।

लेकिन up() और down() चयनकर्ताओं का उपयोग करें, ताकि वे कक्षाओं का चयन भी कर सकें, न केवल आईडी।

आपको केवल यह याद रखना होगा कि आप up() या down() का उपयोग करना चाहेंगे, जैसे नियंत्रणों के लिए एक आम हैंडलर होता है, या जब आप जिस घटक के बाद होते हैं वह ढांचे द्वारा स्वतः उत्पन्न होता है तो आप इसे स्वयं आईडी नहीं दे सकते।

+0

मैंने सुना है कि getCmp का उपयोग करने के लिए यह बहुत अच्छा अभ्यास नहीं है क्योंकि यदि आपको ऑब्जेक्ट तक पहुंच की आवश्यकता है, तो आप इसे नियंत्रक में आसानी से पकड़ सकते हैं। मुझे एहसास है कि ऐसी परिस्थितियां हैं जहां यह काम नहीं करती है, लेकिन मैं बस इतना कह रहा हूं कि मैंने क्या सुना है। – incutonez

+0

ठीक है, स्वीकार्य रूप से जब एमवीसी ढांचे का उपयोग किया जाता है, तो आपको 'Ext.getCmp() 'और' refs' और उनके संबंधित प्राप्तकर्ताओं के अधिक उपयोग को देखने की संभावना है। लेकिन मैं कहूंगा कि यह किसी भी चीज़ से स्टाइल व्यवसाय का अधिक है। रेफरी का उपयोग करने का एक अन्य लाभ यह है कि यदि आप किसी घटक की आईडी बदलते हैं, तो आपको केवल इसे रेफरी में अपडेट करना होगा, जहां 'getCmp()' के साथ आपको कोड बेस सर्च-प्रतिस्थापन करना होगा। – Izhaki

+0

हाँ, यह एक और कारण है कि मैंने एमवीसी ढांचे का उपयोग करके सुना है बेहतर है। मेरा मतलब है, अगर आप कर सकते हैं तो इसका उपयोग करना समझ में आता है, लेकिन जैसा कि मैंने कहा, कभी-कभी आपको getCmp का उपयोग करना पड़ता है। – incutonez

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