2012-12-04 12 views
13

मैं jQuery v1.8.3 और jQuery UI v1.9.2 का उपयोग कर रहा हूं। मैं कुछ मौजूदा विकल्पों और विधियों को जोड़कर और ओवरराइड करके एक मौजूदा jQuery UI विजेट (मेरे मामले में Autocomplete विजेट) का विस्तार करना चाहता हूं लेकिन अन्य कार्यक्षमताओं को आधिकारिक रिलीज में मौजूद रखने के रूप में रखता हूं। मैं इसे "उचित" (शायद, "मानक") तरीका कैसे बना सकता हूं?मौजूदा jQuery UI विजेट का विस्तार कैसे करें?


पीएस: मैंने वेब पर खोज की (1, 2, ...) और मुझे अधिकतर से संबंधित दस्तावेज मिले जो jQuery UI विजेट बनाते हैं लेकिन मौजूदा एक को विस्तारित नहीं करते हैं।

+1

"विस्तार" परिभाषित करें। आप जो करना चाहते हैं उसके आधार पर, आप आमतौर पर नई विधियों को जोड़ते हैं और फिर अपनी अतिरिक्त कार्यक्षमता का उपयोग करने के लिए कुछ मौजूदा तरीकों को ओवरराइड करते हैं। जैसा कि [स्वतः पूर्ण उच्चारण फोल्डिंग एक्सटेंशन] (https://github.com/scottgonzalez/jquery-ui-extensions/blob/master/autocomplete/jquery.ui.autocomplete.accentFolding.js)। स्वच्छ और भविष्य के सबूत के तरीके में बहुत कुछ नहीं है। –

+0

मुझे लगता है कि कोई भी जवाब प्रदान कर सकता है कि आपको इसे सावधानी से करना है। आपको कोडबेस से परिचित होना होगा, और फिर सुनिश्चित करें कि आप एक-दूसरे के साथ अनुबंध अनुबंधों को बनाए रखें। – thatidiotguy

+0

@ फैब्रिसियो मैट - आपका क्या मतलब है "साफ और भविष्य के सबूत के तरीके में बहुत कुछ नहीं है"? – user12882

उत्तर

35

jQuery UI 1.9+ में, एक विजेट को विस्तारित करना एक नया विजेट बनाने के समान ही किया जाता है।

प्रारंभिक बिंदु के रूप आधार विजेट ($.Widget) का उपयोग कर एक नया विजेट बनाना::

$.widget("ns.widget", { ... })

एक नया विजेट है कि एक मौजूदा विजेट से विरासत बनाना विजेट कारखाने ($.widget()) कुछ परिदृश्यों का समर्थन करता है एक विजेट

$.widget("ns.widget", $.ns.existingWidget, { ... })

विस्तार:

+०१२३५१६४१०६१

$.widget("ns.widget", $.ns.widget, { ... })

आप देखेंगे कि विस्तारित वाक्यविन्यास और विरासत वाक्यविन्यास समान हैं। विजेट फैक्ट्री यह ध्यान देने योग्य है कि आप जिस विजेट को बना रहे हैं और जिस विजेट से आप विरासत में हैं, वह वही है और इसे उचित तरीके से संभाल लें।

जब विजेट को विरासत या विस्तारित किया जाता है, तो आपको केवल यह परिभाषित करने की आवश्यकता होती है कि आप क्या बदलना चाहते हैं या जोड़ना चाहते हैं। आधार विजेट पर मौजूद कुछ नई विधियां भी हैं जो विरासत और संदर्भ बदलने वाले तरीकों के साथ काम करना आसान बनाती हैं। विधियों और उनके विवरणों की पूरी सूची के लिए jQuery.Widget documentation पढ़ें। यदि आप विजेट बढ़ा रहे हैं तो आप निश्चित रूप से _super() पढ़ना चाहेंगे।

यहाँ एक उदाहरण है कि 500 करने के लिए डिफ़ॉल्ट delay विकल्प को बदलने और एक नया विकल्प prefix जो सभी सुझावों को जोड़ा जाता है जोड़ेंगे:

$.widget("ui.autocomplete", $.ui.autocomplete, { 
    options: { 
     delay: 500, 
     prefix: "" 
    }, 

    _renderItem: function(ul, item) { 
     var label = item.label; 
     if (this.options.prefix) { 
      label = this.options.prefix + " " + label; 
     } 
     return $("<li>") 
      .append($("<a>").text(label)) 
      .appendTo(ul); 
    }, 
}); 
+6

* विस्तार * और * विरासत * के बीच अंतर क्या हैं? – user12882

+3

विरासत मौजूदा विजेट में बदलाव किए बिना, एक नया विजेट बनाता है। विजेट को विस्तारित करना मौजूदा विजेट का व्यवहार बदलता है, न कि नया बना रहा है। –

+1

यदि यह किसी को भी एक ही समय/सिरदर्द बचाता है, तो मैंने अभी देखा है कि आप jQuery UI के डेटपिकर (संस्करण 1.10 में और शायद बाद में) का विस्तार नहीं कर सकते हैं क्योंकि यह पिछले संस्करणों में विजेट फैक्ट्री पर आधारित नहीं है। यह प्रश्न http://stackoverflow.com/questions/25011698/extending-jquery-ui-datepicker देखें। अन्य विगेट्स के साथ, विस्तार करना ठीक काम करना चाहिए। – jinglesthula

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