2010-04-27 9 views
5

मैं उत्सुक एक तरीका है कि कुछ के लिए आवश्यक हैं में एक jQuery प्लगइन के लिए विकल्प निर्दिष्ट करने के लिए कैसे कर रहा हूँ, कुछ वैकल्पिक रूप से ओवरराइड कर रहे हैं, और कुछ छुआ नहीं जा सकता है।jQuery प्लगइन विकल्प: आवश्यक, वैकल्पिक, दुर्गम

मैं हमेशा की तरह के साथ शुरुआत की:

jQuery.fn.plugin = function (options){ 
    var defaults = { username: "", posts:10, api: "http://myapi.com" } 
    var settings = jQuery.extend({}, defaults, options); 
} 

चलो कहते हैं कि मैं चाहता हूँ username आवश्यक होने की है, posts वैकल्पिक (10 करने के लिए डिफ़ॉल्ट) और आप (आप प्लगइन के उपयोगकर्ता किया जा रहा है) नहीं बदल सकते हैं api, भले ही वे कोशिश करें। आदर्श रूप से, वे सभी अलग-अलग वस्तुओं में विभाजित होने की बजाय एक ही डेटा संरचना में होंगे। विचार?

उत्तर

1

यदि आप उपयोगकर्ता नाम चाहते थे आवश्यक होने की, मैं इसे एक पैरामीटर बनाने चाहते हैं, यह देखते हुए कि यह केवल आवश्यक बात है और 20 मापदंडों आप इस तरह से करना चाहते हैं नहीं कर रहे हैं। कुछ इस तरह:

jQuery.fn.plugin = function (username, options){ 
    var defaults = { posts:10, api: "http://myapi.com" } 
    var settings = jQuery.extend({}, defaults, options); 
} 

वहाँ एक साफ आवश्यक तरीका यह पूरी तरह से एक भी पारित कर दिया वस्तु में करने के लिए, कम से कम नहीं एक साधारण एक है जो आप एक API के लिए क्या चाहते हैं नहीं है,। वैकल्पिक कोई डिफ़ॉल्ट और चेतावनी या कुछ निर्दिष्ट करने के लिए हो सकता है अगर यह वहाँ नहीं है मुझे लगता है:

jQuery.fn.plugin = function (options){ 
    var defaults = { posts:10, api: "http://myapi.com" } 
    var settings = jQuery.extend({}, defaults, options); 
    if(typeof options.username == 'undefined') { 
    alert("You must specify a username"); 
    return this; 
    } 
} 

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

5
$.fn.plugin = function(username, options) { 
    if (!username) throw "Must provide a username."; 

    var config = $.extend({}, $.fn.plugin.defaults, options); 

    var privateVal = 4; 
    ... 
} 

$.fn.plugin.defaults = { 
    posts: 10 
} 

यहाँ एक है सारांश:

  • आवश्यक पैरामीटर आमतौर पर सामान्य आदेश पैरामीटर के रूप में सबसे स्पष्ट रूप से पारित होते हैं। यदि इनमें से बहुत से लोग कुछ प्रकार की संरचना पर विचार करते हैं - या बेहतर - एक अलग एपीआई।
  • विकल्प सबसे आसानी से पिछले पैरामीटर के रूप में एक विकल्प हैश के माध्यम से निर्दिष्ट कर रहे हैं। सामान्य तौर पर इन वैकल्पिक होना चाहिए, लेकिन यह निश्चित रूप से फेंक और त्रुटि के लिए कि वे याद कर रहे हैं संभव है।
  • jQuery के extend समारोह का उपयोग कर चूक में भरें। इन्हें इकट्ठा करने के लिए आपके पास आमतौर पर कुछ "डिफ़ॉल्ट" होंगे। मैं प्लगइन के नाम पर नाम अंतर के लिए खुद को गुंजाइश करना चाहता हूं - और कौन से विकल्प उपलब्ध हैं, इसके सहायक दस्तावेज़ के रूप में।
  • आम तौर पर throw अगर एक आवश्यक पैरामीटर याद आ रही है।
  • यदि आपके पास मूल्य हैं, तो आप कॉलर को गड़बड़ नहीं करना चाहते हैं, उन्हें अपनी प्लगइन में परिभाषित करें, जहां जावास्क्रिप्ट का स्कोपिंग कॉलर्स को उनके साथ गड़बड़ करने से रोक देगा।
संबंधित मुद्दे