ส่วนขยายคือฟังก์ชันที่ทำงานในบล็อกระหว่างการเริ่มต้น ซึ่งมักจะเพิ่มการกำหนดค่าหรือลักษณะการทำงานที่กำหนดเองลงในบล็อก มิกซ์อินช่วยให้คุณเพิ่มพร็อพเพอร์ตี้หรือฟังก์ชันตัวช่วยลงในบล็อกได้ แต่ไม่ทํางานทันที
คุณต้องใช้ส่วนขยายหรือมิกซ์อินก็ต่อเมื่อกำหนดบล็อกด้วย JSON หากใช้ JavaScript เพื่อกําหนดบล็อก คุณสามารถเรียกใช้ฟังก์ชันการเริ่มต้นค่าใน init
ได้โดยตรง และเพิ่มเมธอดหรือพร็อพเพอร์ตี้ลงในคําจํากัดความโดยตรง
ส่วนขยาย
ส่วนขยายคือฟังก์ชันที่ทำงานในแต่ละบล็อกของประเภทหนึ่งๆ เมื่อสร้างบล็อก เช่น ผู้ใช้อาจเพิ่มการกําหนดค่าที่กําหนดเอง (เช่น การตั้งค่าเคล็ดลับเครื่องมือของบล็อก) หรือลักษณะการทํางานที่กําหนดเอง (เช่น การเพิ่มโปรแกรมรับฟังเหตุการณ์ลงในบล็อก)
// This extension sets the block's tooltip to be a function which displays
// the parent block's tooltip (if it exists).
Blockly.Extensions.register(
'parent_tooltip_extension',
function() { // this refers to the block that the extension is being run on
var thisBlock = this;
this.setTooltip(function() {
var parent = thisBlock.getParent();
return (parent && parent.getInputsInline() && parent.tooltip) ||
Blockly.Msg['MATH_NUMBER_TOOLTIP'];
});
});
ชิ้นงานต้อง "ลงทะเบียน" เพื่อให้เชื่อมโยงกับสตริงคีย์ได้ จากนั้นคุณสามารถกําหนดคีย์สตริงนี้ให้กับพร็อพเพอร์ตี้ extensions
ของคําจํากัดความ JSON ของประเภทบล็อกเพื่อใช้ส่วนขยายกับบล็อก
{
//...,
"extensions": ["parent_tooltip_extension",]
}
นอกจากนี้ คุณยังเพิ่มชิ้นงานหลายรายการพร้อมกันได้อีกด้วย โปรดทราบว่าพร็อพเพอร์ตี้ extensions
ต้องเป็นแบบอาร์เรย์ แม้ว่าคุณจะใช้ชิ้นงานเพียงรายการเดียวก็ตาม
{
//...,
"extensions": ["parent_tooltip_extension", "break_warning_extension"],
}
มิกซ์อิน
Blockly ยังมีวิธีการที่สะดวกสำหรับกรณีที่คุณต้องการเพิ่มพร็อพเพอร์ตี้/ฟังก์ชันตัวช่วยบางอย่างลงในบล็อก แต่ไม่ต้องเรียกใช้ทันที ซึ่งทํางานโดยให้คุณลงทะเบียนออบเจ็กต์ mixin ที่มีพร็อพเพอร์ตี้/เมธอดเพิ่มเติมทั้งหมด จากนั้นจะรวมออบเจ็กต์มิกซ์อินไว้ในฟังก์ชันที่ใช้มิกซ์อินทุกครั้งที่สร้างอินสแตนซ์ของบล็อกประเภทที่ระบุ
Blockly.Extensions.registerMixin('my_mixin', {
someProperty: 'a cool value',
someMethod: function() {
// Do something cool!
}
))`
คีย์สตริงที่เชื่อมโยงกับมิกซ์อินจะอ้างอิงใน JSON ได้เช่นเดียวกับส่วนขยายอื่นๆ
{
//...,
"extensions": ["my_mixin"],
}