2011-10-17 3 views
24

स्रोत के माध्यम से जाने के दौरान, मैंने देखा कि 'टॉगल' तत्व की स्थिति को संग्रहीत करने के लिए jQuery._data का उपयोग करता है। मैंने क्रोम में jQuery.cache ऑब्जेक्ट की जांच की और पाया कि तत्व के डेटा ऑब्जेक्ट में अभी तक एक और ऑब्जेक्ट था जिसके तहत jQuery शब्द द्वारा एक संख्या के साथ प्रीपेड किया गया था जिसे मैं अनुमान लगा रहा हूं। हालांकि, मैंने तत्व की स्थिति के बारे में कोई डेटा नहीं देखा। बस {olddisplay: 'block'}। JQuery._data के उद्देश्य के रूप में कोई संकेत और यह कैसे काम करता है?jQuery.data और jQuery._data (अंडरस्कोर डेटा) के बीच क्या अंतर है?

मैं पूरे दिन स्रोत पर देख रहा हूं .... कृपया मुझे स्रोत देखने के लिए मत कहो। मेरी आंखें और मस्तिष्क आपको धन्यवाद देंगे।

+2

आप:

// An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if (typeof name === "object" || typeof name === "function") { if (pvt) { cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); } else { cache[ id ] = jQuery.extend(cache[ id ], name); } } 

और फिर बाद में है कि एक ही समारोह में, इस टिप्पणी बहुत वर्णनात्मक है वेरिएबल्स और फ़ंक्शंस (या ऑब्जेक्ट विधियों/गुणों) को देखें जिन्हें * निजी * या किसी अन्य विशेष अर्थ के रूप में संभाला जाना है, एक प्रीपेन्डेड वर्ण है जैसे '_'' को दायरे या एप्लिकेशन द्वारा समूहबद्ध करने के लिए। JQuery में, इसका मतलब केवल * ऑब्जेक्ट के लिए निजी के रूप में व्यवहार करें *, यानी, ** बाहरी रूप से एक्सेस न करें। ** –

उत्तर

46

jQuery ऑब्जेक्ट पर संग्रहीत डेटा के लिए 'प्राइवेट' ध्वज सेट करने के लिए _data का उपयोग करता है। pvt का उपयोग किया जाता है ताकि जब आप ऑब्जेक्ट से सार्वजनिक डेटा का अनुरोध करते हैं, तो प्राइवेट डेटा वापस नहीं किया जाता है। यह .data() के सार्वजनिक उपयोग को प्रभावित करने से jQuery के .data() तंत्र (जैसे टॉगल करता है) का आंतरिक उपयोग रखना है।

आप jQuery स्रोत में इस घोषणा देख सकते हैं:

// For internal use only. 
_data: function(elem, name, data) { 
    return jQuery.data(elem, name, data, true); 
}, 

कौन सा बस jQuery.data कॉल और चौथे पैरामीटर (जो गोपनीयता है) सच होना बाध्य करती है। डेटा पुनर्प्राप्त करते समय, यदि pvt ध्वज सेट किया गया है, तो इसे थोड़ा अलग तरीके से पुनर्प्राप्त किया जाता है। .data() पर सार्वजनिक इंटरफेस pvt ध्वज का खुलासा नहीं करते हैं।

आप pvt का एक उदाहरण jQuery.data() के इस हिस्से में यहाँ से निपटने देख सकते हैं: अक्सर

// Internal jQuery data is stored in a separate object inside the object's data 
// cache in order to avoid key collisions between internal data and user-defined 
// data 
if (pvt) { 
    if (!thisCache[ internalKey ]) { 
     thisCache[ internalKey ] = {}; 
    } 
    thisCache = thisCache[ internalKey ]; 
} 
+0

ग्रेट विवरण। अपने जवाब के लिए आपको बहुत बहुत धन्यवाद! – THEtheChad

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