वर्कस्पेस में किया गया हर बदलाव, एक इवेंट को ट्रिगर करता है. इन इवेंट से, हर बदलाव की स्थिति के पहले और बाद की जानकारी पूरी तरह से मिलती है.
वर्कस्पेस से इवेंट सुनना
वर्कस्पेस में addChangeListener
और removeChangeListener
तरीके होते हैं. इनका इस्तेमाल, इवेंट स्ट्रीम को सुनने के लिए किया जा सकता है. उदाहरण के लिए, कोड का रीयल-टाइम में जनरेट होना.
एक और उदाहरण, ब्लॉक की ज़्यादा से ज़्यादा सीमा का डेमो है.
आम तौर पर, इन दोनों उदाहरणों में यह ध्यान नहीं रखा जाता कि ट्रिगर करने वाला इवेंट क्या था. ये सिर्फ़ वर्कस्पेस की मौजूदा स्थिति देखते हैं.
बेहतर इवेंट लिसनर, ट्रिगर करने वाले इवेंट को देखेगा. इस उदाहरण में, उपयोगकर्ता की पहली टिप्पणी होने पर, अलर्ट भेजने के साथ-साथ, उसके बाद कोई और अलर्ट न भेजने के लिए, ऑडियो रिकॉर्डिंग बंद हो जाती है.
function onFirstComment(event) {
if (event.type == Blockly.Events.BLOCK_CHANGE &&
event.element == 'comment' &&
!event.oldValue && event.newValue) {
alert('Congratulations on creating your first comment!')
workspace.removeChangeListener(onFirstComment);
}
}
workspace.addChangeListener(onFirstComment);
फ़्लाईआउट में होने वाले किसी भी इवेंट को सुनने के लिए, फ़्लाईआउट के वर्कस्पेस में एक लिसनर जोड़ा जा सकता है.
var flyoutWorkspace = yourWorkspace.getFlyout().getWorkspace();
flyoutWorkspace.addChangeListener(onFirstComment);
ब्लॉक से इवेंट सुनना
ब्लॉक में बदलाव सुनने वाले फ़ंक्शन हो सकते हैं. ये फ़ंक्शन, वर्कस्पेस में होने वाले किसी भी बदलाव पर कॉल किए जाते हैं. इनमें ब्लॉक से जुड़े बदलाव के साथ-साथ, ब्लॉक से जुड़े नहीं होने वाले बदलाव भी शामिल हैं. इनका इस्तेमाल अक्सर, ब्लॉक के लिए चेतावनी वाला टेक्स्ट सेट करने या वर्कस्पेस के बाहर उपयोगकर्ता को सूचना देने के लिए किया जाता है.
फ़ंक्शन को जोड़ने के लिए, Block.setOnChange
को किसी फ़ंक्शन के साथ कॉल किया जाता है. इसे शुरू करने के दौरान या JSON एक्सटेंशन के ज़रिए भी किया जा सकता है. ऐसा तब किया जाता है, जब आपको इसे सभी प्लैटफ़ॉर्म पर इस्तेमाल करना हो.
JSON
{
// ...,
"extensions":["warning_on_change"],
}
Blockly.Extensions.register('warning_on_change', function() {
// Example validation upon block change:
this.setOnChange(function(changeEvent) {
if (this.getInput('NUM').connection.targetBlock()) {
this.setWarningText(null);
} else {
this.setWarningText('Must have an input block.');
}
});
});
JavaScript
Blockly.Blocks['block_type'] = {
init: function() {
// Example validation upon block change:
this.setOnChange(function(changeEvent) {
if (this.getInput('NUM').connection.targetBlock()) {
this.setWarningText(null);
} else {
this.setWarningText('Must have an input block.');
}
});
}
}
onchange
प्रॉपर्टी को सीधे ब्लॉक पर भी सेट किया जा सकता है:
JavaScript
Blockly.Blocks['block_type'] = {
init: function() {
// Example validation upon block change:
this.onchange = function(changeEvent) {
if (this.getInput('NUM').connection.targetBlock()) {
this.setWarningText(null);
} else {
this.setWarningText('Must have an input block.');
}
};
}
}
सिस्टम, बदलाव वाले इवेंट को पास करके फ़ंक्शन को कॉल करता है. फ़ंक्शन के अंदर,
this
का मतलब ब्लॉक इंस्टेंस से है.
किसी भी बदलाव पर फ़ंक्शन को कॉल किया जाता है. इसलिए, अगर इसका इस्तेमाल किया जाता है, तो डेवलपर को यह पक्का करना चाहिए कि listener फ़ंक्शन तेज़ी से काम करे. फ़ाइल फ़ोल्डर में ऐसे बदलाव भी नहीं करने चाहिए जिनसे सुनने वाले को कैस्केड या लूप में भेजा जा सकता है.
उदाहरण के लिए, controls_flow_statements
, logic_compare
, और procedures_ifreturn
ब्लॉक देखें.
ध्यान दें कि बदलाव किए जा सकने वाले फ़ील्ड में, इनपुट की पुष्टि करने और साइड इफ़ेक्ट पैदा करने के लिए, इवेंट लिसनर होते हैं.
इवेंट किस तरह के हैं
अलग-अलग इवेंट के बारे में जानकारी पाने के लिए, रेफ़रंस दस्तावेज़ देखें.
डेमो
इवेंट की मदद से किए जा सकने वाले शानदार कामों के उदाहरण के लिए, मिरर डेमो देखें. इस डेमो में दो Blockly फ़ाइल फ़ोल्डर हैं, जिन्हें इवेंट का इस्तेमाल करके सिंक किया जाता है.