ההליך חוסם את כל המודלים של נתוני הגיבוי של ההפניה שמגדירים את החתימה של ההליך (שם, פרמטרים והחזרה). מודלי הנתונים שמסופקים על ידי התוסף @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...
}