إنشاء نماذج بيانات إجراءات مخصّصة

يؤدي الإجراء إلى حظر جميع نماذج البيانات الداعمة المرجعية التي تحدد توقيع الإجراء (الاسم والمعلمات والإرجاع). تُعد نماذج البيانات التي توفرها @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...
}