สร้างโมเดลข้อมูลขั้นตอนที่กำหนดเอง

ขั้นตอนจะบล็อกโมเดลข้อมูลสนับสนุนอ้างอิงทั้งหมดที่กำหนดลายเซ็นของ กระบวนการ (ชื่อ พารามิเตอร์ และการคืนสินค้า) โมเดลข้อมูลจัดทำโดย ปลั๊กอิน @blockly/block-shareable-procedures สร้างขึ้นเพื่อ จำลองลักษณะการทำงานของการบล็อกกระบวนการในตัวแบบเดิมของ Blockly

ซึ่งรวมถึงลักษณะการทํางานที่คุณอาจไม่ต้องการสําหรับกระบวนการที่กําหนดเอง บล็อก รวมถึง:

  • ไม่รองรับประเภทการแสดงผล
  • พารามิเตอร์ทั้งหมดเชื่อมโยงกับตัวแปรร่วม

หากต้องการใช้ลักษณะการทำงานแบบอื่น คุณสามารถสร้างข้อมูลขั้นตอนที่กำหนดเองของตัวเองได้

การติดตั้งใช้งานโมเดลขั้นตอน

โมเดลข้อมูลกระบวนการของคุณจะต้องติดตั้งใช้งาน อินเทอร์เฟซ IProcedureModel

class MyProcedureModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;

    // Note: construction should not add the model to the procedure map.
  },

  // Other methods are omitted for brevity...
}

การใช้งานโมเดลพารามิเตอร์

โมเดลข้อมูลพารามิเตอร์ของคุณต้องใช้พารามิเตอร์ อินเทอร์เฟซ IParameterModel

class MyParameterModel {
  constructor(workspace, name, id) {
    this.workspace = workspace;
    this.name = name;
    this.id = id;
  },

  setProcedureModel(model) {
    this.model =  model;
    return this;
  }

  // Other methods are omitted for brevity...
}

การเปลี่ยนแปลงทริกเกอร์

เมธอดใดก็ตามที่ทริกเกอร์การเปลี่ยนแปลงโมเดลกระบวนการควรเรียกใช้ triggerProceduresUpdate จาก ปลั๊กอิน @blockly/block-shareable-procedures การดำเนินการนี้จะ เรียกใช้ doProcedureUpdate ในการบล็อกกระบวนการทั้งหมด ซึ่งทำให้แสดงผลอีกครั้ง

import {triggerProceduresUpdate} from '@blockly/block-shareable-procedures';

class MyProcedureModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  setName(name) {
    this.name = name;
    triggerProcedureUpdate();
    return this;
  }

  // Other methods are omitted for brevity...
}

กิจกรรม

โมเดลกระบวนการใน ปลั๊กอิน @blockly/block-shareable-procedures ก็เริ่มทำงานเช่นกัน เหตุการณ์เมื่อมีการแก้ไขขั้นตอน ซึ่งทำให้พื้นที่ทำงานหลายแห่ง ซิงค์กันอยู่เสมอ และโมเดลของกระบวนการที่จะแชร์ นอกจากนี้ คุณยังสามารถเลือก เพื่อทำให้เหตุการณ์เริ่มทำงานหากคุณต้องการ

การดีซีเรียลไลซ์

ชั้นเรียนแต่ละชั้นต้องมีเมธอด static loadState เพื่อรองรับด้วย การดีซีเรียลไลซ์

class MyProcedureModel {
  static loadState(state, workspace) {
    // Note that the procedure model should not deserialize parameters.
    // The deserializer will handle that.
    return new MyProcedureModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}

class MyParameterModel {
  static loadState(state, workspace) {
    return new MyParameterModel(workspace, state.name, state.id);
  }

  // Other methods are omitted for brevity...
}