26

मुझे लगता है कि मैं विजेट परिभाषाओं में _create और _init के बीच अंतर को समझता हूं (उदाहरण this question के लिए देखें), लेकिन मैं अभी भी भेद के लिए उद्देश्य के बारे में निश्चित नहीं हूं। _create() में या _init() में सेटअप कार्य किस प्रकार के होते हैं? क्या विजेट गलत है अगर विजेट लेखक गलत चुनता है?jQuery UI विजेट में _init और _create के बीच निर्णय कैसे लें?

उत्तर

33

से:

उपयोग _create का निर्माण और मार्कअप, बाँध घटनाओं, आदि _init() में डिफ़ॉल्ट कार्यक्षमता जगह इंजेक्षन करने के लिए। संवाद विजेट, उदाहरण के लिए, autoOpen पैरामीटर प्रदान करता है यह बताता है कि डायलॉग प्रारंभ होने के बाद संवाद होना चाहिए या नहीं; _init() के लिए एक आदर्श स्थान!

इसके अलावा

:

विजेट कारखाना स्वचालित रूप से प्रारंभ दौरान _create() और _init() तरीकों आग, इसी क्रम में। पहली नज़र में ऐसा लगता है कि प्रयास डुप्लिकेट किया गया है, लेकिन दोनों के बीच दृष्टि अंतर है। क्योंकि विजेट कारखाने एक ही तत्व पर एक से अधिक instantiations के खिलाफ रक्षा करता है, _create() हो जाएगा, प्रत्येक विजेट उदाहरण के लिए एक बार में अधिकतम बुलाया जबकि _init() हर बार विजेट तर्क के बिना कहा जाता है बुलाया जाएगा ...

लेखक _init() उपयोग करता है जब _create() कोडित किया जाना चाहिए था, तो परिणाम होगा कि _init() में कोड विजेट इन्स्टेन्शियशन प्रति एक बार निष्पादित किया जाएगा।

+0

ठीक है, एक बार प्रति * कॉल * विजेट पर :-) किसी भी मामले में, वह दूसरा लिंक अमूल्य है (इस पर और अन्य मुद्दों पर); मुझे पता नहीं कि मैं इसे कैसे चूक गया। बहुत धन्यवाद! –

4

लघु जवाब यहाँ: जब आप पहली बार अपने jQuery-ui प्लगइन $ xx.your-प्लगइन की तरह (अपने विकल्पों) चलाने के लिए, _create() निष्पादित किया जाएगा; _init() को पहले और पहली बार निष्पादित किया जाएगा जब आपका कोड $ xx.your-plugin (आपके विकल्प) में चलाया जाएगा;

वहाँ इस तरह jQuery-ui.custom.js में कुछ कोड हैं:

var instance = $.data(this, fullName); 
if (instance) { 
    instance.option(options || {})._init(); 
} 

इसलिए, यदि आप, jQuery-ui प्लगइन के साथ एक चार्ट आकर्षित के बाद यह बाहर खींचा है, तो आप चाहते हैं इसे अपडेट करने के लिए नए डेटा का उपयोग करें, आपको अपने चार्ट को अपडेट करने के लिए _init() में ऐसा करने की आवश्यकता है। यदि आप बस कुछ प्रदर्शित करते हैं और उन्हें पूरी तरह अपडेट नहीं करेंगे, तो _create() आपकी आवश्यकताओं को पूरा करेगा।

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