Blockly एपीआई का इस्तेमाल करना

परिचय

इस पेज पर, फ़ंक्शन को कॉल करने और उन्हें ऐक्सेस करने के सबसे सही तरीकों के बारे में बताया गया है प्रॉपर्टी को ब्लॉक करें. ये सिद्धांत, प्लगिन बनाने पर लागू होते हैं ब्लॉकली या ब्लॉकली को किसी स्टैंडअलोन ऐप्लिकेशन में इंटिग्रेट करना.

सब-क्लास करना और बढ़ाना

Blockly में काम करने की सुविधा जोड़ने के कई तरीके हैं. जैसे:

  • सब-क्लास (उदाहरण के लिए, नया रेंडरर बनाना)
  • मिक्सिन (उदाहरण के लिए, ब्लॉक एक्सटेंशन या म्यूटेटर जोड़ना)
  • ब्लॉक की परिभाषाएं (उदाहरण के लिए, प्रोसेस ब्लॉक की परिभाषाएं)

इस दस्तावेज़ के लिए, तीनों केस इसके बराबर हैं: सब-क्लासिंग.

सब-क्लास इंजेक्ट करना

हम Blockly.inject तरीके से कुछ क्लास को बदलने की सुविधा देते हैं. ये सब-क्लास को या तो बेस क्लास को बढ़ाना होगा या उसकी संबंधित क्लास को लागू करना होगा इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है.

अपनी सब-क्लास को इंजेक्ट करने के तरीके में पास किया जा सकता है.

Blockly.inject('blocklyDiv', {
  plugins: {
    'metricsManager': CustomMetricsManagerClass
  }
}

इसके अलावा, Blockly.registry का इस्तेमाल करके अपनी क्लास को रजिस्टर किया जा सकता है. इसके लिए, रजिस्ट्री का नाम डालें. अगर आप अपना इंजेक्शन स्टोर करते हैं, तो यह उपयोगी होता है सिर्फ़ JSON के तौर पर काम करते हैं.

Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', SubClass);

Blockly.inject('blocklyDiv', {
  plugins: {
    'metricsManager': 'YOUR_NAME'
  }
}

ये क्लास बदली जा सकती हैं:

रजिस्ट्रेशन का नाम इंटरफ़ेस/बेस क्लास
blockDragger Blockly.IBlockDragger
connectionChecker Blockly.IConnectionChecker
connectionPreviewer Blockly.IConnectionPreviewer
flyoutsVerticalToolbox Blockly.IFlyout
flyoutsHorizontalToolbox Blockly.IFlyout
metricsManager Blockly.IMetricsManager
renderer Blockly.blockRendering.Renderer
toolbox Blockly.IToolbox

इंटरफ़ेस का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, इंटरफ़ेस सेक्शन देखें दस्तावेज़ की एक कॉपी है.

किसको दिखाई दे

हम TypeScript ऐक्सेस मॉडिफ़ायर का इस्तेमाल करते हैं का इस्तेमाल करें.publicprivateprotected कुछ प्रॉपर्टी के बारे में @internal के साथ जानकारी दी जा सकती है TsDoc टिप्पणियां.

सभी public और protected प्रॉपर्टी, Blockly वेबसाइट का रेफ़रंस सेक्शन. आप यह भी कर सकते हैं कोड पढ़कर जानें कि विज़िबिलिटी

सार्वजनिक

जिस भी चीज़ के लिए public का निशान लगा हो वह हमारे सार्वजनिक एपीआई का हिस्सा होती है. मॉड्यूल में मौजूद कोई भी प्रॉपर्टी जिसमें विज़िबिलिटी मॉडिफ़ायर न हो, तो उसे सार्वजनिक माना जाता है.

हम अपने सार्वजनिक एपीआई को बार-बार या बिना किसी वजह के नहीं बदलने की कोशिश करते हैं और चेतावनी. अपवाद: हम नए एपीआई को एक ही रिलीज़ में सार्वजनिक कर सकते हैं और शुरुआती सुझाव के हिसाब से, अगली रिलीज़ में इसमें बदलाव किया जा सकेगा. इसके बाद, सार्वजनिक फ़ंक्शन या प्रॉपर्टी को स्थिर रखना.

सार्वजनिक फ़ंक्शन को कहीं से भी कॉल किया जा सकता है और सब-क्लास में जब तक हस्ताक्षर में कोई बदलाव न हो.

सुरक्षित

सुरक्षित फ़ंक्शन और प्रॉपर्टी को सिर्फ़ तय करने वाला क्लास ऐक्सेस कर सकता है या सब-क्लास.

सब-क्लास, सुरक्षित फ़ंक्शन और प्रॉपर्टी को बदल सकते हैं. इसके लिए, ये तरीके इस्तेमाल नहीं किए जा सकते टाइप सिग्नेचर बदल रहा है.

उदाहरण के लिए, बेस रेंडरर क्लास को बढ़ाने वाला कस्टम रेंडरर ऐक्सेस कर सकता है भी शामिल हैं.

हर मामले में, आपको यह पक्का करना चाहिए कि फ़ंक्शन या प्रॉपर्टी का इस्तेमाल किया जाता है.

निजी

इन्हें सिर्फ़ उसी फ़ाइल में कोड से ऐक्सेस किया जा सकता है जिसमें परिभाषा है. सीधे इन प्रॉपर्टी को ऐक्सेस करने से हो सकता है कि इनके काम करने का तरीका तय न हो.

सब-क्लास को, निजी फ़ंक्शन और प्रॉपर्टी को बदलने की अनुमति नहीं है.

निजी प्रॉपर्टी में बिना किसी चेतावनी के बदलाव किए जा सकते हैं, क्योंकि इनमें इसे Blockly के सार्वजनिक एपीआई का हिस्सा माना जाता है.

Blockly के कुछ फ़ंक्शन में, 'किसको दिखे' एनोटेशन नहीं हैं, क्योंकि वे एक्सपोर्ट नहीं किया जा सकता. ये फ़ंक्शन आवश्यक रूप से लोकल वैरिएबल हैं और इसका इस्तेमाल उनके तय मॉड्यूल के बाहर नहीं किया जा सकता. इन पर विचार किया जाना चाहिए प्राइवेट प्रॉपर्टी के बराबर है.

आंतरिक

इंटरनल फ़ंक्शन और प्रॉपर्टी, कोर लाइब्रेरी है, लेकिन बाहरी तौर पर नहीं. उन्हें TsDoc @internal के तौर पर शामिल किया गया है एनोटेशन.

अंदरूनी प्रॉपर्टी बिना किसी चेतावनी के बदली जा सकती हैं, क्योंकि इनमें इसे Blockly के सार्वजनिक एपीआई का हिस्सा माना जाता है.

इंटरनल प्रॉपर्टी कोर से कहीं से भी ऐक्सेस किया जा सकता है. साथ ही, कोर में तब तक सब-क्लास का इस्तेमाल करती रहेंगी, जब तक हस्ताक्षर में कोई बदलाव नहीं होता. इन्हें ऐसा नहीं होना चाहिए कोर लाइब्रेरी के बाहर से ऐक्सेस किया जा सकता है.

बंद किया गया

@deprecated के तौर पर मार्क की गई किसी भी चीज़ का इस्तेमाल नहीं किया जाना चाहिए. ज़्यादातर रोक में ये शामिल हैं कंसोल चेतावनी या TSDoc में दिए गए निर्देशों का पालन करना चाहिए.

जहां ज़रूरी हो वहां काम न करने वाले फ़ंक्शन, चेतावनी को लॉग करेंगे. इस चेतावनी में, हटाने की तय तारीख और कॉल करने के लिए रिप्लेसमेंट फ़ंक्शन का सुझाव.

अक्सर पूछे जाने वाले सवाल

मुझे जिस फ़ंक्शन का इस्तेमाल करना है, अगर वह सार्वजनिक नहीं है, तो क्या होगा?

सुविधा का अनुरोध कर सकते हैं ब्लॉकली का भी इस्तेमाल करें. इसमें अपने इस्तेमाल के उदाहरण के साथ-साथ यह भी बताएं कि क्या हैं कि हम इन्हें सार्वजनिक करें.

हम इस सुविधा का इस्तेमाल करके, इस पर चर्चा करेंगे कि इस सुविधा को सार्वजनिक करना है या नहीं या क्या आपके पास वही जानकारी पाने के दूसरे तरीके हैं.

अगर हम इसे सार्वजनिक करने का फ़ैसला करते हैं, तो आप या Blockly की टीम, जिसमें बदलाव किया जा सकता है. यह सुविधा अगले Blockly रिलीज़ में लाइव हो जाएगी.

अगर आपको प्लगिन में किसी ऐसे सदस्य का इस्तेमाल करना है जो सार्वजनिक नहीं है, तो प्लग इन को बीटा के रूप में इंस्टॉल करें और अपने README में जानकारी को शामिल करें.

मंकीपैचिंग के बारे में क्या ख्याल है?

बंदीपैचिंग के बारे में पढ़ें.

मंकीपैचिंग असुरक्षित है, क्योंकि पैच बिना सूचना दिए काम करना बंद कर सकते हैं ब्लॉकली एपीआई के गैर-सार्वजनिक हिस्सों का इस्तेमाल करने के लिए. प्लग इन में पैच करना विशेष रूप से खतरनाक, क्योंकि हो सकता है कि आपका कोड किसी अन्य प्लगिन के कोड को बंद करके ऐसा करता है. इस वजह से, हम सच में ऐप्लिकेशन और तीसरे पक्ष के प्लगिन में मंकीपैचिंग के ख़िलाफ़ सलाह देंगे. उसे प्रथम पक्ष प्लग इन में स्वीकार नहीं करेगा.

क्या सार्वजनिक फ़ंक्शन को बदला जा सकता है?

सब-क्लास में शामिल होने पर: हां. नहीं तो: नहीं, यह बंदरपैचिंग है.

क्या सुरक्षित फ़ंक्शन ओवरराइड किए जा सकते हैं?

सब-क्लास में शामिल होने पर: हां. नहीं तो: नहीं, यह बंदरपैचिंग है.

क्या मेरे पास इंटरनल या प्राइवेट फ़ंक्शन को बदलने का विकल्प है?

नहीं, यह बंदरपैचिंग है.

प्रॉपर्टी को सीधे तौर पर कब ऐक्सेस किया जा सकता है? मुझे गैटर या सेटर का इस्तेमाल कब करना चाहिए?

अगर हम किसी गैटर या सेटर को प्रकाशित करते हैं, तो कृपया सीधे के बजाय उसका उपयोग करें प्रॉपर्टी को ऐक्सेस करना. अगर प्रॉपर्टी सार्वजनिक नहीं है, तो पक्के तौर पर गैटर का इस्तेमाल करें और सेटर.

अगर किसी प्रॉपर्टी के लिए कोई जानकारी नहीं है, तो क्या होगा?

डिफ़ॉल्ट रूप से यह सार्वजनिक होता है, लेकिन अगर हम आपके आपके लिए गेटर/सेटर का जोड़ा.

अगर किसी फ़ंक्शन के पास कोई एनोटेशन नहीं है, तो क्या होगा?

यह जानकारी डिफ़ॉल्ट रूप से सार्वजनिक के तौर पर सेट होती है.

अगर मुझे अब भी पक्के तौर पर नहीं पता है, तो क्या करना होगा?

फ़ोरम के बारे में सवाल पूछना और हम आपसे आम तौर पर एक कामकाजी दिन के अंदर संपर्क करेंगे.