تحظر الإجراءات جميع نماذج البيانات الأساسية المرجعية التي تحدّد توقيع الإجراء (الاسم والمَعلمات والقيمة المعروضة). تم إنشاء نماذج البيانات التي يوفّرها المكوّن الإضافي @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...
}