ส่วนขยายและมิกซ์อิน

ส่วนขยายคือฟังก์ชันที่ทำงานในบล็อกระหว่างการเริ่มต้น ซึ่งมักจะเพิ่มการกำหนดค่าหรือลักษณะการทำงานที่กำหนดเองลงในบล็อก มิกซ์อินช่วยให้คุณเพิ่มพร็อพเพอร์ตี้หรือฟังก์ชันตัวช่วยลงในบล็อกได้ แต่ไม่ทํางานทันที

คุณต้องใช้ส่วนขยายหรือมิกซ์อินก็ต่อเมื่อกำหนดบล็อกด้วย 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"],
}