2012-10-26 18 views
10

मेरे पास एक प्रोजेक्ट है जो एकाधिक आवश्यकता संदर्भों और गतिशील रूप से लोड किए गए jQuery संस्करणों और प्लगइन्स का उपयोग करता है। (JQuery संस्करणों को केंद्रीय रूप से सोर्स किया जाएगा और इनलाइन नहीं किया जाएगा)। मेजबान के लिए jQuery अखंडता और प्रत्येक संदर्भ के साथ ही प्लगइन अलगाव महत्वपूर्ण हैं।RequJS - संदर्भों के भीतर jQuery संस्करणों और प्लगइन्स को अलग करना

  • एक विशिष्ट भीतर की आवश्यकता होती है संदर्भ की आवश्यकता होती है संदर्भ हैं
  • और होस्टिंग पृष्ठ या किसी अन्य के fn को प्रभावित किए बिना, मैं:

    मैं एक लोडर प्लगइन RequireJS निम्नलिखित उपयोग के मामलों को संभालने के लिए के लिए लिख रहा हूँ करने के लिए की तरह:

    • लोड jQuery के किसी भी संस्करण मैं अपने विशिष्ट jQuery संस्करण के fn पर
    • लोड प्लगइन्स जरूरत
    • इस तरह मेरे संदर्भ की आवश्यकता के भीतर किसी भी मॉड्यूल प्लग-इन

मैं परीक्षण here साथ लोडर के लिए एक उदाहरण परियोजना है साझा कर सकते हैं कि एक आवश्यक jQuery संस्करण पर रेफेरेंन्शिअल सत्यनिष्ठा है।

यह लोडर का उपयोग करके दूसरी कॉल करते समय आखिरी स्थिति में असफल रहा है, यह पूर्व संस्करण को दूर कर रहा है।

मैं स्थानीय लोड किए गए jQuery संस्करण स्कोप में लोड किए गए प्लगइन में $ संदर्भों को अलग करने के लिए eval का उपयोग भी कर रहा हूं। ऐसा करने के बेहतर तरीके पर किसी भी विचार की सराहना की जाएगी।

यदि यह आसान/क्लीनर समाधान है तो इसे सरल (बेवकूफ) रखना चाहते हैं।

धन्यवाद, बहुत कुछ।

+0

और eval आप एक सर्वर साइड स्क्रिप्ट CONCATENATE हो सकता से बचने के लिए 'परिभाषित ([ 'jQuery-संस्करण'], समारोह (jQuery) { var $ = jQuery; '+ [प्लगइन src] +'}); 'और फिर एक प्लगइन कॉल लोड करने के लिए जो प्लग-इन के नाम के साथ स्क्रिप्ट और क्वेरी स्ट्रिंग में jquery संस्करण – wheresrhys

उत्तर

1

मुझे इसे प्लगइन में भी करना पड़ा है। आपको http://api.jquery.com/jQuery.noConflict/ देखना चाहिए। उदाहरण देने के लिए:

jQueryLocal = jQuery.noConflict(true); 

लेकिन आपको निश्चित रूप से एकाधिक jQueries लोड करने से बचने की कोशिश करनी चाहिए। उदाहरण के लिए, आप जांच सकते हैं कि पर्याप्त संस्करण पहले ही लोड हो चुका है (मेरे मामले में, मैंने जांच की है कि 1.9+ कुछ भी लोड करने से पहले उपलब्ध था, और यदि स्थानीय चर को मौजूदा वैश्विक jQuery ऑब्जेक्ट के सरल संदर्भ में सेट किया गया है, लेकिन फिर मैं प्लग इन का उपयोग नहीं किया गया था

आप के साथ संस्करण की जांच कर सकते हैं:।

var jQueryLocal; 
var versions = (jQuery && /^([0-9]+)\.([0-9]+)\./.exec(jQuery.fn.jquery)) || [0,0]; 
if(versions[0] > 1 || versions[1] >= 9) { 
    jQueryLocal = jQuery; 
} else { 
    // load script with whatever you're doing. If it's asynchronous, set callbacks etc. 
    jQueryLocal = jQuery.noConflict(true); 
}