2010-07-02 17 views
6

मैं एक jquery-ui विजेट बनाना चाहता हूं और मैं इस तक पहुंचने का सबसे अच्छा तरीका नहीं हूं।jquery-ui संवाद से कस्टम विजेट कैसे प्राप्त करें

विजेट एक jquery-ui संवाद के अंदर होस्ट किए गए कुछ डेटा के संत का प्रबंधन करेगा।

क्या मुझे कस्टम विजेट बनाना चाहिए, विजेट बनाने में फ़ंक्शन विजेट लक्ष्य में कुछ तत्व जोड़ें और फिर मेरे विजेट लक्ष्य पर संवाद विजेट को कॉल करें।

या

वहाँ jQuery ui को संवाद से प्राप्त करना और बस की सामग्री के भाग को ओवरराइड कोई तरीका है?

$.widget("ui.customwidget", $.ui.dialog, { 
    options: { 
     // your options 
    }, 

    _create: function() { 
     $.ui.dialog.prototype._create.apply(this); 
     // constructor 
    }, 

    destroy: function() { 
     // destructor 
     $.ui.dialog.prototype.destroy.apply(this); 
    }, 

    _setOption: function(key, value) { 
     $.ui.dialog.prototype._setOption.apply(this, arguments); 
     // process the setting of options 
    } 
    // other methods 
}); 

लेकिन मैं एक संवाद, स्लाइडर आदि क्योंकि जैसे पर उपयोग के लिए प्रोत्साहित नहीं करेंगे:

उत्तर

6

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

$.widget("ui.customwidget", $.Widget, { 
    // ... 
    _create: function() { 
     $.Widget.prototype._create.apply(this); 
     this.element.dialog(); 
    } 
    // ... 
}); 

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

मैं अभी भी अपने समाधान से खुश नहीं हूं, लेकिन विजेट्स को विस्तारित करने से मुझे नई समस्याओं के पूरे भार के सामने रखा गया है जिनके समाधान या तो jQuery यूआई स्रोत को पैच करने या बदसूरत हैक लिखने के लिए किया गया होगा।

(मैंने अभी देखा है कि यह प्रश्न लगभग एक वर्ष पुराना है, और पूछने वाले को अब यह समस्या नहीं हो सकती है। लेकिन मैंने पहले से ही सभी चीजें लिखी हैं और सोचें कि पोस्ट नहीं किया जाना बुरा है।)

+0

आपको '$ .ui.dialog.prototype._destroy.apply (यह) कॉल नहीं करना चाहिए; 'व्युत्पन्न विजेट की' _destroy' विधि में? – daniel1426

+0

आप सही हैं, मैंने सुपर कॉल को सही किया है। जैसा कि मैंने अभी देखा है, [_super()] (http://api.jqueryui.com/jquery.widget/#method-_super) और [_superApply()] (http://api.jqueryui.com/jquery .widget/# method-_superApply) विधियों अब, जो सुपर कॉल को अधिक आसान बनाता है। –

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