2010-08-31 15 views
24

jQuery के भीतर एक सामान्य पैटर्न एक तरीका है जो एक कॉलबैक लेता है जो उस सरणी के तत्व और उसके सूचकांक के तत्व को पारित करता है। हालांकि, यह पूरी तरह यादृच्छिक लगता है जो तर्क पहले आता है। उदाहरण के लिए, jQuery डॉक्स से http://api.jquery.com पर:jQuery के कॉलबैक तर्क असंगत क्यों हैं?

  • jQuery.each(collection, callback(indexInArray, valueOfElement))
  • .each(function(index, Element))
  • jQuery.map(array, callback(elementOfArray, indexInArray))
  • .map(callback(index, domElement))
  • jQuery.grep(array, function(elementOfArray, indexInArray), [ invert ])
  • .filter(function(index))

तीन मामलों में (jQuery.each, .each, .map) सूचकांक पहले आता है। अन्य दो (jQuery.grep, jQuery.map) में तत्व पहले आता है। मुझे पता है कि एपीआई अब सेट है, लेकिन यह मेरे लिए एक सकल असंगतता की तरह लगता है।

क्या कोई पैटर्न है जो मुझे याद आ रहा है या यह सिर्फ यादृच्छिक है? क्या इसे ठीक किया जाना चाहिए या क्या मुझे बस चुप रहना चाहिए और उन्हें याद रखना चाहिए?

+2

नाइस में उपलब्ध कराया मिलान करने के लिए किया गया था! तो PHP के सरणी फ़ंक्शंस असंगत पैरामीटर ऑर्डरिंग वाले एकमात्र नहीं हैं। –

उत्तर

8

यह पूरी तरह से यादृच्छिक नहीं है। क्योंकि:

$.map($('selector'), function(el, index) { /* element (DOMElement) is first, index optional */ }); 
$('selector').map(function(index) { /* 'this' (DOMElement) is first.... index optional */ }); 

पैटर्न देखें? दूसरे उदाहरण में दूसरा तर्क है, लेकिन यह केवल सुविधा द्वारा पारित किया गया है, और यह this जैसा ही है।

पैटर्न यह है कि पहला तर्क हमेशा दूसरे से "अधिक" महत्वपूर्ण होता है, और अंतिम तर्क कम से कम महत्वपूर्ण ("अधिक वैकल्पिक") होना चाहिए। इसलिए यदि आपको केवल एक की आवश्यकता है तो आपको कम से कम महत्वपूर्ण तर्क निर्दिष्ट करने की आवश्यकता नहीं है। और $(...).each के मामले में, अक्सर आपको किसी भी तर्क की आवश्यकता नहीं होगी, क्योंकि this केवल वही है जो आप चाहते हैं।

+2

चयनकर्ताओं और संदर्भ के साथ एक ही चीज़। $ (myselector, mycontext) संदर्भ वैकल्पिक है, यही कारण है कि यह दूसरा है। –

+0

@ मार्क Schultheiss, बिल्कुल। –

+0

समझ में आता है - अच्छा बिंदु! मैं नाराज होना शुरू कर रहा था, लेकिन अब अगर मुझे ऐसा लगता है तो मैं शायद याद रखूंगा! – Jason

2

चूंकि जावास्क्रिप्ट आपको उन पैरामीटरों को अनदेखा करने देता है जिन्हें आप उपयोग नहीं कर रहे हैं (यानी, आप कॉलबैक फ़ंक्शन को परिभाषित कर सकते हैं जो केवल एक पैरामीटर लेता है, भले ही इसे दो के साथ बुलाया जा सके), आम तौर पर, पहला पैरामीटर वह होता है ज्यादातर उपयोग करने की संभावना है। (असल में, this वारायबल आमतौर पर डेटा आइटम का उपयोग करने की सबसे अधिक संभावना है, इसके बाद पहले पैरामीटर, आदि)

7

यह मुझे कभी-कभी निराश करता है - $.each वह है जो मैं हमेशा गड़बड़ करता हूं।

मुझे लगता है कि यह ढांचे के विभिन्न हिस्सों पर काम कर रहे विभिन्न लोगों/टीमों के कारण है। यह एक समुदाय संचालित ढांचा है, इसलिए किसी ने शायद इसे जल्दी पकड़ लिया और अब ढांचा इतना व्यापक फैल गया है, वे इंटरनेट पर सभी साइटों का 35% तोड़ने के बिना इसे ठीक नहीं कर सकते हैं।

मुझे नहीं लगता कि यह तय किया जाएगा - कम से कम यह मेरी राय/रवैया है। मुझे बस उन्हें स्मृति में प्रतिबद्ध करना होगा और सर्वश्रेष्ठ के लिए आशा करना होगा!

0

IMHO, $.map और $.grep रूबी में वर्ग के तरीकों की तरह व्यवहार करते हैं, क्योंकि:

  • वे पहले तर्क के रूप में लक्ष्य सरणी ले।
  • कॉलबैक तर्क आदेश रूबी (each_with_index)

मेरी रूबी अनुभव प्रति सिर्फ मेरी निजी स्मरक है कि के अनुरूप है।

अन्य विधियां थोड़े jQuery विरासत हैं और "ठीक" करने में आसान नहीं हैं, हालांकि मैं अभी भी एक फिक्स चाहता हूं, क्योंकि यह पहले से ही हुआ है कि jQuery latest is not really LATEST, तो क्या संभव नहीं है?

0

https://learn.jquery.com/using-jquery-core/iterating/

चेतावनी का एक शब्द के अनुसार: $.map() कॉलबैक तर्क के आदेश स्विच [जब $().map, $each() और $().each() की तुलना में]। इस आदेश देशी जावास्क्रिप्ट .map() विधि ECMAScript 5.

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