प्रोटोटाइप और jQuery शांतिपूर्ण सह-अस्तित्व?

वोट
11

मैं जावास्क्रिप्ट बारे में बहुत कम जानते हैं लेकिन इसके बावजूद मैं अपने वर्डप्रेस ब्लॉग पर एक साथ कुछ पक्की सड़क के लिए कोशिश कर रहा हूँ। यह काम कर रहा है नहीं, और मैं इसे कैसे हल करने के लिए पता नहीं है, और हे, कि क्या StackOverflow के लिए है, है ना?

सबसे पहले, त्रुटि संदेश है:

Error: element.dispatchEvent is not a function
Source File: http://.../wp-includes/js/prototype.js?ver=1.6
Line: 3936

यह पृष्ठ लोड पर होता है। मेरे पृष्ठ लोड हैंडलर thusly पंजीकृत किया गया है:

Event.observe(window, 'load', show_dates_as_local_time);

त्रुटि दूर हो जाता है तो मैं कुछ अन्य प्लग इन अक्षम है, और इस (प्लस googling) मेरे समाप्त करने के लिए है कि यह प्रोटोटाइप और jQuery (जो अन्य प्लग-इन के कुछ लोगों द्वारा प्रयोग किया जाता है) के बीच एक संघर्ष था नेतृत्व किया।

दूसरी बात मैं का उपयोग करने का वर्डप्रेस अभ्यास की सिफारिश अनुसरण कर रहा हूँ wp_enqeue_scriptप्रोटोटाइप पुस्तकालय करने के लिए अपने जावास्क्रिप्ट से निर्भरता को जोड़ने के लिए, इस प्रकार है:

add_action( 'wp_print_scripts', 'depo_theme_add_javascript' );

function depo_theme_add_javascript() {
    wp_enqueue_script('friendly_dates', 'javascript/friendly_dates.js', array('prototype'));
}

अब मैं भी जानते jQuery और प्रोटोटाइप के बीच कुछ संभावित टकराव जो jQuery का उपयोग कर हल कर रहे हैं देखते हैं कि हूँ noConflictsविधि। मुझे लगता है कि विभिन्न स्थानों लेकिन कोई अच्छा से फोन कर की कोशिश की है। मैं नहीं लगता है कि इस समस्या है, क्योंकि एक) noConflictकार्य करने के लिए पूरी तरह से संबंधित है $चर, जो यहाँ समस्या हो प्रतीत नहीं होता है, और ख) मैं होगा उम्मीद वर्डप्रेस मेरे लिए यह सुलझाने के लिए है क्योंकि यह कर सकते हैं ...

अन्त में, Venkman डिबगर का उपयोग कर रहा निर्धारित किया है कि elementत्रुटि संदेश में संदर्भित वास्तव में एक है HTMLDocumentलेकिन यह भी एक कमी करता है dispatchEvent। सुनिश्चित नहीं हैं कि यह कैसे हो सकता है, यह देखते हुए यह एक मानक डोम विधि है?

06/01/2009 को 06:17
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
11

वहाँ एक बुरा चाल कई पुस्तकालयों है कि मैं एक अलग पसंद के हिसाब से लिया है करना है, और यह लग रहा है प्रोटोटाइप की तरह इन में से एक है।

Mootools इस करता है, अगर मैं सही हूँ, और यह बुनियादी वर्गों पर प्रोटोटाइप के कई अधिक भार शामिल है, बंदर उन्हें पैचिंग।

और इसी तरह, मैं इसी तरह अजीब व्यवहार का सामना करना पड़ा जब mootools और jQuery मौजूद थे, आमतौर पर jQuery मर क्योंकि यह किसी वस्तु विधि है जो किसी भी तरह अतिभारित किया गया था / बंदर Mootools द्वारा समझौता बुला रहा था।

इसके अलावा, रहस्यमय तरीके से, स्क्रिप्ट उपयोग सूची से बाहर mootools ले, के परिणामस्वरूप सब कुछ बहुत तेजी से चल रहा है, जो मैंने निष्कर्ष निकाला कम वस्तु प्रदूषण की वजह से था।

अब मैं गलत हो सकता है, लेकिन मैं अपने अनुभव से यह निष्कर्ष निकाला ऐसे पुस्तकालयों बस एक दूसरे के साथ सह-अस्तित्व के लिए पसंद नहीं है, और कैसे mootools कोड मुझे लग रहा था की गति नीचा दिखाने के लिए, जिस पर सामान्य बातें किया गया देखकर, मैं चूसा और सभी mootools पोर्ट jQuery के आधार पर कोड (ए समय लेने सौदा मैं आपको विश्वास दिलाता है), और परिणाम है, कोड है कि था तेजी से और अजीब त्रुटियों को बताई नहीं जा सकती थे नहीं था।

मैं सुझाव है कि आप कम से कम के रूप में प्रवास पर विचार एक अपने विकल्पों में से।

एक और बात, जब लेखन:

मैं इस वाक्य रचना टूट जाता है '$' किसी भी तरह की घटना किसी में सुरक्षित कैप्सूलीकरण का एक सा के लिए अपने सभी jQuery संचालित कोड के साथ उपयोग करने के लिए, करते हैं।

रनटाइम कोड यह निष्पादित करने से पहले document.ready के लिए इंतजार कर रहा है:

 jQuery(function($){ 
      code_with_$_here; 
 }); 

jQuery प्लगइन्स

(function($){ 
    code_with_$_here; 
})(jQuery); 

इनका प्रयोग करते हुए यह लोगों के लिए आसान हो जाएगा का उपयोग कर आप एक संघर्ष जारी किए जाने की बहुत बिना इसका इस्तेमाल करने में सक्षम होना लिखने के लिए होता है किसी भी jQuery।

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

06/01/2009 को 07:27
का स्रोत उपयोगकर्ता

वोट
6

इसके लायक के बारे में JQuery साइट पर यह लेख पढ़ अन्य पुस्तकालय के साथ JQuery का उपयोग करना । यह सिर्फ noConflict विकल्प की तुलना में अधिक से संबंधित है।

06/01/2009 को 07:48
का स्रोत उपयोगकर्ता

वोट
5

मुझे लगता है कि क्योंकि सभी jQuery प्लगइन्स एक प्रोटोटाइप संस्करण और सभी प्रोटोटाइप प्लगइन्स एक jQuery संस्करण है है आप अच्छी तरह से खोज करनी चाहिए। क्या तुम सच में तुम क्या देखने के लिए नहीं मिलता है और आप केवल एक पुस्तकालय का उपयोग नहीं कर सकते हैं, एक बार देख ले यहाँ पर

jQuery.noConflict();

लेकिन फिर से, मैं यह नहीं समझ बनाने के प्रत्येक पुस्तकालय के लिए 15-20kb से अधिक लोड करने के लिए लगता है :)

06/01/2009 को 13:42
का स्रोत उपयोगकर्ता

वोट
0

सभी सुझावों के लिए धन्यवाद। अंत में मुझे लगता है कि केंट के स्पष्टीकरण करीबी, जो मूल रूप से करने के लिए "प्रोटोटाइप टूट गया है" की राशि थी। (क्षमा करें यदि मैं तुम्हें गलत तरीके से कर रहा हूँ का सारांश :)

के रूप में jQuery.noConflictविकल्प - मैं पहले से ही सवाल में इस का उल्लेख किया। यह एक फर्क नहीं पड़ता जब आप इस विधि चलाते हैं, और मुझे लगता है कि पर बहुत कम नियंत्रण है। जैसा कि मैंने कहा, मैं विभिन्न स्थानों के एक जोड़े (विशेष पृष्ठ पर शीर्ष लेख और भी मेरी स्क्रिप्ट फ़ाइल से) में इसे चलाने की कोशिश की है, कोई प्रभाव नहीं है। तो, ज्यादा हम हो सकता है, "बस का उपयोग यह की तरह सभी पसंद करेगा noConflict" है नहीं तो कम से कम में अतिरिक्त जानकारी के बिना नहीं, तो इस प्रश्न का उत्तर।

इसके अलावा, jQuery.noConflict लगता है के बारे में होने $चर, और त्रुटि बिंदु के आसपास कोड बिल्कुल कि चर के साथ सौदा नहीं करता है। बेशक वे परोक्ष रूप से संबंधित हो सकता है, मैं इसे नीचे ट्रैक नहीं किया है।

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

11/01/2009 को 23:23
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more