2012-05-03 14 views
7

$.data() का उपयोग करके मैं अन्य jQuery प्लगइन के साथ संघर्ष से कैसे बच सकता हूं?jQuery.data() नामस्थान

मैं मैं $(el).data('myplugin').foo आदि

लेकिन कितनी आसानी से एक मूल्य बदल सकते हैं जैसे कि यह

$(el).data('myplugin', { foo: 'a', xyz: 34});

की तरह मेरे डाटा स्टोर और उपयोग करने के लिए एक कुंजी का उपयोग कर सकते सोच रहा था, पूरे अधिभावी के बिना डेटा? "Foo" के मान को बदलने की तरह।

उत्तर

7

क्यों

$(el).data('myplugin.foo') 

और

$(el).data('myplugin.xyz') 

का उपयोग नहीं?

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

+0

* .key * को बाहर होना चाहिए() s – m90

+0

@ m90: वह सचमुच कुंजी 'myplugin.foo "नाम देने का सुझाव दे रहा है। । –

+0

@ रॉकेट ने कभी भी * var.iable * होने का विचार नहीं किया। क्या आप जानते हैं कि यह वैध वाक्यविन्यास होगा? – m90

7

बस उस संपत्ति को बदलें जिसे आप बदलना चाहते हैं।

http://jsfiddle.net/rQQdf/

var el = $("<div />");  
el.data("myPlugin",{ foo: "foo" }); 
console.log(el.data("myPlugin").foo); // foo 
el.data("myPlugin").foo = "bar"; 
console.log(el.data("myPlugin").foo); // bar 

जहां तक ​​नाम स्थान संघर्ष, एक समाधान क्रम (जब प्लगइन परिभाषित किया गया है) पर एक टाइमस्टैम्प पैदा करते हैं और अपने नाम स्थान में है कि टाइमस्टैम्प उपयोग करने के लिए है। यह अभी भी सबसे तेज़ ब्राउज़र में संघर्ष के खिलाफ 100% सुरक्षित नहीं है, लेकिन यह बहुत करीब आता है।

+0

+1 यह काम करता है क्योंकि वस्तु एक है संदर्भ :-) –

+0

यह काम करता है क्योंकि ऑब्जेक्ट एक संदर्भ है, मुझे पहले यह होना चाहिए था :( मैं इस दृष्टिकोण से परहेज कर रहा था क्योंकि मैंने सोचा था कि मुझे ऐसा करने की आवश्यकता होगी, 'var data = el.data (" myPlugin "); data.foo =" bar "; el.data (" myPlugin ", डेटा);' +1 केविन – Jashwant

3

मैं व्यक्तिगत रूप से एक हाइफ़न-पृथक नामकरण सम्मेलन का उपयोग करता हूं जो क्लास नाम, आईडी, डेटा गुण इत्यादि का उपसर्ग करता है, जिसमें कोड का मालिक होता है, और कार्यक्षमता के क्षेत्र के लिए एक व्यक्ति का संक्षेप पहचानकर्ता होता है।

अगर मैं एक चार्ट कार्यक्रम कंपनी फू के लिए काम कर रहे थे, मेरे उपसर्ग हो सकता है:

foo-chart- 

यह सब कंपनी कंपनी के लिए एकमात्र पहचान बनाने के लिए अनुमति देता है मुझे, और कोड के क्षेत्रों के लिए एक दूसरे के लिए अद्वितीय (ताकि कार्यक्षमता के अन्य क्षेत्रों में अन्य देवताओं के साथ टकराने से बचें)।

काल्पनिक उदाहरण:

<button id="foo-chart-refresh" class="foo-chart-interact" data-foo-chart-last="201205031421">Refresh Chart</button> 
<script type="text/javascript"> 
    var lastRefresh = $('#foo-chart-refresh').data('fooChartLast'); // see docs on .data() for case/hyphenation handling 
</script> 

मैं एक हाइफन का उपयोग कर पाते हैं लगभग किसी भी स्थान के साथ अच्छी तरह से फिट बैठता है मेरी पहचानकर्ता की जरूरत होगी - या तो एक मार्कअप attr मूल्य के रूप में या नाम, या कोड में, आदि आप अपनी जरूरतों को फिट करने वाले किसी भी char का उपयोग कर सकते हैं (. बहुत आम है)

+1

मुझे तीन। यह बूटस्ट्रैप में विशेष रूप से स्पष्ट है vascript मॉड्यूल 'डेटा-स्लाइड' 'डेटा-स्लाइड-टू '। घटनाओं में नेमस्पेसिंग भी दिखाई देता है लेकिन अवधि 'slid.bs.carousel' के साथ। –

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