2013-04-15 10 views
5

मैं jQuery के बहुत पुराने संस्करणों (1.2.6, 1.4.3) से नवीनतम पर काम पर बड़ी संख्या में साइटों को अपग्रेड करने का प्रयास कर रहा हूं संस्करण (1.9.1)। चीजें बहुत अच्छी तरह से चल रही हैं - माइग्रेशन स्क्रिप्ट अधिकांश लेगवर्क करता है, भले ही यह केवल 1.6.4 से 1.9.1 के लिए है, मुझे लगता है कि मुझे अन्य बदलावों की आवश्यकता है जो सॉर्टिंग की आवश्यकता है।jQuery अपग्रेड, .attr और .prop - 1.2.6 से 1.9.1

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

मेरे प्रारंभिक "ठीक" (बहुत बड़ी एयर उद्धरण में) बस पुनः निर्देशित कॉल एक से दूसरे पर आधारित था:

$.fn.attr = $.fn.prop; 

मुझे यकीन है कि इस कीड़े की एक पूरी दुनिया का परिचय है, यह हालांकि हूँ तय किया गया जो शुरू में टूटा हुआ था। तब से, मैंने केवल इसके बाद एक और बग देखा है (अब तक, वैसे भी), जो कि पूर्ण सामान्यीकृत यूआरएल - http://jsfiddle.net/eT6xE/1/

लौटने के लिए यह href विशेषता (जो # में शुरू होने वाला एंकर हो सकता है) का कारण बनता है।
<a href="#something"><span>Product Details</span></a> 
<div></div> 

$('div').append($('a').attr('href')); 
$('div').append('<br />' + $('a').prop('href')); 
// #something \n http://fiddle.jshell.net/eT6xE/1/show/#something 

यह देखते हुए कि यह एकमात्र बग है जिसे मैंने देखा है, मैंने थोड़ा सा खेला है और इसके लिए एक वर्कअराउंड के साथ आया है - http://jsfiddle.net/M92CE/1/ - जो मूल कार्यक्षमता को दोबारा शुरू करने में काम करता है। भले ही यह href attr/prop मुद्दा के लिए एक काफी साफ समाधान जैसा प्रतीत होता है, मैं मदद नहीं कर सकता लेकिन महसूस करता हूं कि प्रारंभिक फ़िक्स है ... यह कितना लंबा हो सकता है।

क्या इस कार्यक्षमता को फिर से शुरू करने के लिए कोई "मानक" तरीका है, और यदि नहीं, तो क्या ऐसा करने का कोई अच्छा तरीका है?

चीयर्स।

+0

मैं कुछ कार्यों को ओवरराइड करने के समान कुछ करता हूं, लेकिन पुराने कोड से नए कार्य करने के बजाय मैं एक विशिष्ट कार्य करता हूं जो: नए कार्य में प्रतिनिधि, किसी भी व्यवहार में परिवर्तन का ख्याल रखता है, और कुछ बहिष्कार चेतावनी (जैसे कंसोल का उपयोग करने) के कुछ रूप भी फेंकता है ताकि क्लाइंट कोड को पुराने दृष्टिकोण से हटाया जा सके। –

उत्तर

5

jQuery 1.9 ने पिछले संस्करणों में बहिष्कृत की गई पुरानी विशेषताओं के लॉट को हटा दिया। JQuery 1.2 से 1.9 तक चलते हुए, आप पाए गए हैं कि आप उनमें से बहुत से हिट करने के लिए लगभग निश्चित हैं।

सौभाग्य से, jQuery 1.9 में पुराने संस्करणों के साथ पिछड़े संगतता के लिए jQuery Migrate नामक एक साथी लाइब्रेरी है, जो सभी पुरानी बहिष्कृत सुविधाओं को वापस रखती है जो 1.9 में हटा दी गई थीं।

यदि आपको अपना पुराना कोड बैक अप लेने और नवीनतम jQuery संस्करण के साथ चलने की आवश्यकता है, तो इसे काम करने के लिए jQuery माइग्रेट का उपयोग करें।

हालांकि, ध्यान रखें कि माइग्रेट लाइब्रेरी का उद्देश्य आपको नई सुविधाओं में संक्रमण करने में मदद करना है, ताकि आप अतीत में अपना कोड छोड़ सकें। तो कोड को काम करने के लिए माइग्रेट का उपयोग करें, लेकिन फिर आपको अपना कोड बदलने की शुरुआत करना होगा ताकि आपको माइग्रेट की आवश्यकता न हो।

आपके पास कितना कोड है, इस पर निर्भर करता है कि यह काफी काम हो सकता है, लेकिन वहां माइग्रेट होने से आप एक ही बार में सभी को ठीक करने के बजाय एक-एक करके परिवर्तन कर सकते हैं।

उम्मीद है कि मदद करता है।

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