2011-04-21 8 views
12

मास्क किए गए इनपुट प्लगइन के साथ jquery expose प्लगइन का उपयोग करके मैंने एक समस्या में भाग लिया है। समस्या यह है कि वे दोनों $.mask फ़ंक्शन पर कब्जा करते हैं जो संघर्ष की ओर जाता है। लेकिन मैं विटली इन दो प्लगइन को एक साथ काम करने की आवश्यकता है। मैं उनमें से एक में $.mask का नाम बदलूंगा ... मान लें, $.msk, लेकिन इस मामले में मुझे हमेशा इसे याद रखना होगा और यदि मैं नए संस्करण में अपग्रेड करना चाहता हूं, तो मैं फिर से नाम बदलूंगा।Jquery प्लगइन्स एक ही फ़ंक्शन नाम पर कब्जा करते हैं -> संघर्ष

jquery प्लगइन्स के बीच इस प्रकार के संघर्षों का सामना करने के तरीके के बारे में बेहतर समाधान की तलाश में है।

+1

क्या आप प्लगइन लेखकों से फ़ंक्शन का नाम बदलने के लिए कह सकते हैं? यह आपके, उनके और समुदाय के लिए एक पक्ष करेगा। – SlavaGu

+0

मैं ऐसा करने की कोशिश करूंगा। जब मैं jQuery प्लगइन बनाने पर ट्यूटोरियल पढ़ता हूं तो कहा गया था कि डेवलपर्स को नामकरण प्लगइन से बचने का प्रयास करना चाहिए, संभवतः अन्य प्लगइन डेवलपर्स द्वारा लिया जा सकता है। http: //docs.jquery।कॉम/प्लगइन्स/ऑथरिंग # नेमस्पेसिंग – Nemoden

+0

@ स्लावागु मुझे कोई प्रतिक्रिया नहीं मिली – Nemoden

उत्तर

3

मुझे लगता है कि मैं एम के जवाब से सहमत हूं। एक जोड़ा jQuery.sub() का उपयोग करना हो सकता है।

चूंकि अधिकांश प्लगइन निर्माण के दौरान jQuery ग्लोबल का उपयोग करते हैं, इसलिए आप प्लगइन में से किसी एक को लोड करने से पहले jQuery को उपनाम करने में सक्षम होना चाहिए। फिर आप जो कुछ भी चुनते हैं उसके बाद आप फिर से उपनाम कर सकते हैं।

<script src="http://cdn.jquerytools.org/1.2.5/full/jquery.tools.min.js?foo"></script> 
<script type="text/javascript"> 
var jQuery = $.sub(); 
</script> 
<script src="jquery.maskedinput.js" type="text/javascript"></script> 
<script type="text/javascript"> 
var $$$ = jQuery; 
jQuery = $; 
</script> 

ही संभव लाभ इस दृष्टिकोण है कि यह परिवर्तन है कि एक और प्लगइन jQuery के तरीकों के लिए कर सकते से एक प्लगइन अलग हो सकता है। यह थोड़ा गड़बड़ है लेकिन प्लगइन्स को बदलने का एकमात्र विकल्प है, जिसे मैं सोच सकता हूं।

+3

जब आप jQuery v1.8 में अपग्रेड करते हैं तो याद रखने की एक बात यह है कि 'jQuery.sub' को jQuery v1.7 में बहिष्कृत कर दिया गया है और v1.8 में उपलब्ध नहीं होगा। –

13

मुझे लगता है कि आपके पास समाधानों के बीच एक विकल्प है जिसके लिए आपको कुछ याद रखने की आवश्यकता है, सवाल यह है कि आप कितनी बार याद रखना चाहते हैं।

यदि आप उनमें से किसी एक का नाम बदलते हैं तो आपको किसी भी उन्नयन को पैच करना याद रखना होगा। मुझे नहीं लगता कि यह इतना बड़ा सौदा है, यह सॉफ्टवेयर विकास में हर समय होता है।

एक विकल्प प्लगइन में से एक को खींचना है और फिर तुरंत नामस्थान पैचर लोड करना है, उदाहरण के लिए, jQuery.fn.masked_input = jQuery.fn.mask; और उसके बाद एक्सपोज़र प्लगइन को उसके बाद लोड किया जा सकता है। यह दृष्टिकोण तब तक काम करेगा जब तक कि नामित प्लगइन कहीं भी अपने नाम का संदर्भ नहीं देता है। और, आपको अपने प्लगइन के लिए विशिष्ट लोडिंग ऑर्डर याद रखना होगा। सॉफ़्टवेयर विकास में इस तरह की चीज भी हर समय होती है।

+0

एक प्रतिक्रिया के लिए धन्यवाद। मुझे खेद है, मैं आपका जवाब स्वीकार नहीं कर सकता, लेकिन कम से कम एक उपन्यास का हकदार है। मुझे डर है कि आप सही थे - अगली बार जब मैं इसे अपडेट करना चाहता हूं तो मुझे इस प्लगइन को छूने के लिए अपने दिमाग से कुछ याद रखना होगा। – Nemoden

-1

ठीक है। मैं अब अपने प्रश्न का उत्तर दे रहा हूं।

मैंने पर विचार किया है mu बहुत छोटा का दृष्टिकोण है, लेकिन यह काफी फिट नहीं है।

हम तो जैसे jQuery का नया उदाहरण बनाने के लिए::

var $$$ = $.extend(true, function(selector, context) { 
    return new $$$.fn.init(selector, context); 
}, $); 
$$$.fn = $$$.prototype = jQuery.prototype; 

और हम प्लगइन्स उस पर $ समारोह के बंद होने बनाने (के बाद से $ प्लगइन के अंदर प्रयोग किया जाता है):

(function($) { 
... plugin code goes here ... 
$.fn.extend({ 
     myplugin: function(maybe_some_options) { 
... 
})($$$); 
मेरे सहयोगी निम्नलिखित की पेशकश की

अब हम एक ही समय में $$$(<selector>).myplugin({ do : 'great job', and : 'be happy' }); और $(<selector>).myplugin() पर कॉल कर सकते हैं।

हमें अब तक इस दृष्टिकोण के साथ कोई समस्या नहीं है और मुझे कोई कारण नहीं दिख रहा है कि यह क्यों टूट जाएगा, इसलिए हमने इस निर्णय के साथ जाने का फैसला किया।

+7

यह काम करेगा लेकिन अब आपके क्लाइंट में मेमोरी में jQuery की दो प्रतियां हैं और आपको प्लगइन के लिए jQuery का कौन सा संस्करण उपयोग करने के लिए याद रखना होगा (हर समय)। आप सरल अपग्रेड प्रक्रियाओं और परीक्षणों के पालन के बजाय अपने ग्राहकों को स्मृति में भुगतान कर रहे हैं। –

+1

इनिट() विधि को ओवरराइट करना बेहतर नहीं है, इसके बजाय उप() का उपयोग बेहतर होगा। – TonyQ

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