هر تغییر در فضای کاری باعث ایجاد یک رویداد می شود. این رویدادها به طور کامل وضعیت قبل و بعد از هر تغییر را توصیف می کنند.
به رویدادها از فضای کاری گوش دهید
فضاهای کاری دارای متدهای 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.');
}
});
});
جاوا اسکریپت
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
را مستقیماً در بلوک تنظیم کنید:
جاوا اسکریپت
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
به نمونه بلوک اشاره دارد.
از آنجایی که تابع در هر تغییری فراخوانی می شود، در صورت استفاده، توسعه دهندگان باید اطمینان حاصل کنند که شنونده به سرعت اجرا می شود. همچنین باید مراقب تغییرات در فضای کاری بود که ممکن است به سمت شنونده آبشاری یا حلقهای برگردد.
برای مثال بلوک های controls_flow_statements
، logic_compare
و procedures_ifreturn
را ببینید.
توجه داشته باشید که فیلدهای قابل ویرایش شنونده رویداد خاص خود را برای اعتبارسنجی ورودی و ایجاد عوارض جانبی دارند.
انواع رویداد
برای اطلاعات در مورد رویدادهای فردی به اسناد مرجع مراجعه کنید.
نسخه ی نمایشی
برای مثالی از کارهای جالبی که میتوانید با رویدادها انجام دهید، میتوانید نسخه آزمایشی آینه را بررسی کنید. این نسخه نمایشی دارای دو فضای کاری Blockly است که با استفاده از رویدادها همگام نگه داشته می شوند.