2010-03-10 12 views
5

jQuery प्लगइन्स के लिए स्थिर चर बनाने का सबसे अच्छा तरीका क्या है?स्टेटिक चर एक jQuery प्लगइन्स चर; कैसे बनाएं?

मेरे पास अब तक मेरी सोच को स्पष्ट करने के लिए 2 उदाहरण उपयोग उदाहरण हैं; प्रत्येक विचार के साथ प्रत्येक।
कोई अन्य विचार पाठ्यक्रम का स्वागत करते हैं ...

एक उदाहरण एक स्थिर चर के लिए है: एनीमेशन सेटिंग्स, लेआउट सेटिंग्स, उत्पाद विवरण, आदि; एक स्थिर वैरिएबल कैशिंग डेटा के लिए दूसरा।

मुझे उम्मीद है कि 'स्थिर' सही टर्मिनोलिजी है ... एकल ग्लोबल्स। अगर गलत है तो कृपया सही करें।

केस 1: सेटिंग

// defining globally 
var anObject = { 
value1 = 0; 
value2 = 0; 
} 

jQuery.anObjectSet(partialObject) { 
anObject = jQuery.extend(anObject, partialObject); 
} 

jQuery.fn.myPlugin = function (partialObject) { 
obj = jQuery.extend(anObject, partialObject); 
} 

या हो सकता है के लिए?

// adding to the jQuery object 
jQuery.anObject = { 
value1 = 0; 
value2 = 0; 
} 

jQuery.anObjectSet(partialObject) { 
jQuery.anObject = jQuery.extend(jQuery.anObject, partialObject); 
} 

jQuery.fn.myPlugin = function (partialObject) { 
obj = jQuery.extend(jQuery.anObject, partialObject); 
} 

या शायद?

jQuery.anObjectSet(partialObject) { 
if(!jQuery.anObject) 
    jQuery.anObject = { 
    value1 = 0; 
    value2 = 0; 
    } 

jQuery.anObject = jQuery.extend(jQuery.anObject, partialObject); 
} 

jQuery.fn.myPlugin = function (partialObject) { 
if(!jQuery.anObject) 
    jQuery.anObject = { 
    value1 = 0; 
    value2 = 0; 
    } 
obj = jQuery.extend(jQuery.anObject, partialObject); 
} 

केस 2: कैशिंग

jQuery.fn.myPlugin = function (newObject) { 
if(!cache[newObject]) 
    cache[newObject] = $(newObject); 

return cache[newObject]; 
} 

या हो सकता है के लिए? (मैंने इस विधि को कहीं और देखा)

window.$cache = {}; 

jQuery.fn.myPlugin = function (newObject) { 
if(!$cache[newObject]) 
    $cache[newObject] = $(newObject); 

return $cache[newObject]; 
} 

धन्यवाद। मैं एक .js लाइब्रेरी का निर्माण करना चाहता हूं, सही ट्रैक पर शुरू करना चाहता हूं ...

उत्तर

11

यदि आप अपनी लाइब्रेरी और अपनी लाइब्रेरी के लिए "वैश्विक" या स्थैतिक चर बनाने की तलाश में हैं, तो एक बंद करने का तरीका है चले जाओ।

एक सामान्य वैश्विक एक बुरी चीज है क्योंकि यह नामस्थान को प्रदूषित करती है, और आपको कोई जानकारी नहीं है कि आपकी लाइब्रेरी कौन चल रही है।

किसी अज्ञात फ़ंक्शन के अंदर स्थैतिक चर को परिभाषित करके, हम अपने आप को एक वेरिएबल तक पहुंच प्रदान करते हैं जो कोई भी स्पर्श नहीं कर सकता है और हमारे कार्यों के उद्देश्यों के लिए प्रभावी रूप से "वैश्विक" है। अगर मैं सही तरीके से समझता हूं कि आप क्या करने की कोशिश कर रहे हैं, तो इसे पूरा करना चाहिए।

(function($){ 
    var $cache = {}; 

    jQuery.fn.myPlugin = function (newObject) { 
     if(!$cache[newObject]) 
     $cache[newObject] = $(newObject); 

     return $cache[newObject]; 
    } 

})(jQuery); 

संपादित करें:

$cache चर केवल इस अनाम समारोह में परिभाषित कार्यों के लिए सुलभ हो जाएगा। इसलिए यदि अन्य कार्यों को इस फ़ाइल तक पहुंचने की आवश्यकता है, तो उन्हें इस अज्ञात फ़ंक्शन के अंदर भी परिभाषित किया जाना चाहिए।

यहां सब कुछ परिभाषित करने का एकमात्र विकल्प (AFAIK) को एक्सेसर फ़ंक्शंस का कुछ संयोजन होना है, इस बंद के अंदर परिभाषित एक साधारण फ़ंक्शन जिसका उद्देश्य बाहरी कार्यों को $cache तक पहुंच प्रदान करना है।

अधिमानतः, मैं इस बंद के अंदर आवश्यक कार्यों को परिभाषित करने के साथ जाऊंगा। हालांकि यह अंततः एक कार्यान्वयन विस्तार है, और आपके विवेकानुसार है।

+1

ps, ​​एक "प्लगइन विकास" अनुभाग @ http: //docs.jquery है।कॉम/ट्यूटोरियल, यदि आप और अधिक पढ़ना चाहते हैं :-) – Seaux

+0

यह बहुत अच्छा है ~ एक प्रश्न: मैं इस तकनीक का उपयोग करके कहीं और प्लगइन बना सकता हूं। ऊपर की सिफारिश के रूप में यह एक अज्ञात समारोह में लपेटा। क्या उसके पास $ कैश तक पहुंच होगी? या प्लगइन के फ़ंक्शन को एक ही अनौपचारिक फ़ंक्शन के भीतर निहित करने की आवश्यकता होगी? परीक्षण करने के लिए दूर ... – Ross

+0

@ डैनी संपादन के लिए धन्यवाद। प्रतिभाशाली। यदि संभव हो तो फिर से +1 करें। – Ross

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