blockly‏ > Events

מרחב השמות Events

שיעורים

מחלקה תיאור
BlockBase סיווג מופשט לכל אירוע שקשור לבלוק.
BlockChange הודעה למאזינים כשרכיב כלשהו בבלוק השתנה (למשל ערכי שדות, תגובות וכו').
BlockCreate מודיע למאזינים כשבלוק (או סטאק מחובר של בלוקים) נוצר.
BlockDelete התראה למאזינים כשבלוק (או סטאק מחובר של בלוקים) נמחק.
BlockDrag ההודעה הזו מועברת למאזינים כשמקישים על בלוק וגוררים אותו או משחררים אותו באופן ידני.
BlockFieldIntermediateChange האירוע הזה מתריע למאזינים כשהערך של שדה בבלוק השתנה אבל השינוי עדיין לא הושלם, וצפוי להיגרם בעקבותיו אירוע של שינוי בבלוק.
BlockMove שליחת התראה למאזינים כשבלוק מועבר. יכול להיות שזה יקרה מחיבור אחד למשנהו, או ממיקום אחד בסביבת העבודה למיקום אחר.
BubbleOpen מחלקה לאירוע פתיחה של בועה.
קליק ההודעה הזו מועברת למאזינים כדי להודיע להם שלחצו על רכיב מסוים.
CommentBase מחלקה מופשטת לאירוע של תגובה.
CommentChange התראה למאזינים על כך שתוכן התגובה בסביבת העבודה השתנה.
CommentCollapse
CommentCreate התראה למאזינים על כך שנוצר תגובה בסביבת העבודה.
CommentDelete התראה למאזינים על מחיקה של תגובה בסביבת העבודה.
CommentDrag התראה למאזינים כשמשגררים או משחררים תגובה באופן ידני.
CommentMove התראה למאזינים על כך שהערה בסביבת העבודה הועברה.
CommentResize ההודעה הזו מועברת למאזינים כשמשנים את הגודל של הערה בסביבת עבודה.
FinishedLoading ההודעה מועברת למאזינים כשסביבת העבודה מסיימת את תהליך הדה-סריאליזציה מ-JSON/XML.
נבחרה הכיתה של האירוע שנבחר. האירוע הזה מאפשר להודיע למאזינים שנבחר רכיב חדש.
ThemeChange הודעה למאזינים על כך שנושא סביבת העבודה השתנה.
ToolboxItemSelect האירוע הזה מאפשר להודיע למאזינים שפריט מתיבת הכלים נבחר.
TrashcanOpen התראה למאזינים כשפחית האשפה נפתחת או נסגרת.
UiBase מחלקת בסיס לאירוע בממשק המשתמש. אירועי ממשק משתמש הם אירועים שלא צריך לשלוח אותם דרך האינטרנט כדי שאפשר יהיה לערוך במספר משתמשים (למשל, גלילה בסביבת העבודה, שינוי מרחק התצוגה, פתיחת קטגוריות של תיבת הכלים). אי אפשר לבטל או לבצע מחדש אירועים בממשק המשתמש.
VarBase מחלקה מופשטת לאירוע משתנה.
VarCreate האירוע הזה מעדכן את המאזינים על יצירת מודל משתנה.
VarDelete הודעה למאזינים על כך שמודל משתנה נמחק.
VarRename הודעה למאזינים על שינוי השם של מודל משתנה.
VarTypeChange הודעה למאזינים על כך שסוג המשתנה השתנה.
ViewportChange

ההודעה הזו מועברת למאזינים כדי להודיע להם שהמיקום או קנה המידה של משטח סביבת העבודה השתנו.

לא מתקבלת התראה כשגודל סביבת העבודה משתנה.

כיתות מופשטים

Abstract Class תיאור
Abstract מחלקה מופשטת לאירוע.

ערכים מספריים

ספירה תיאור
BubbleType
ClickTarget

פונקציות

פונקציה תיאור
clearPendingUndo() שינוי אירועי ביטול בהמתנה כך שכשהם יופעלו, הם לא ייכנסו לסטאק הביטולים. הפונקציה נקראת על ידי Workspace.clearUndo.
disable()‎ להפסיק את שליחת האירועים. כל קריאה לפונקציה הזו חייבת לכלול גם קריאה ל-enable.
disableOrphans(event) מגדירים אם בלוק מושבת בהתאם לחיבור שלו. כדאי להשתמש באפשרות הזו באפליקציות שבהן כל הבלוקים צריכים להיות מחוברים לבלוק עליון.
enable()‎ מתחילים לשלוח אירועים. אלא אם האירועים כבר הושבתו כשהתבצעה הקריאה המתאימה להשבתה.
filter(queue)

סינון האירועים שבתור על ידי מיזוג כפילויות, הסרת אירועים ריקים והסדרה מחדש של אירועי BlockChange.

ההיסטוריה של הפונקציה הזו:

הפונקציה הזו נוספה במקור ב-commit cf257ea5 במטרה לצמצם באופן משמעותי את המספר הכולל של האירועים שנשלחים. בהתחלה, הבעיה השפיעה רק על אירועי BlockMove, אבל עם הזמן נוספו אירועים אחרים.

קוד נוסף כדי לשנות את הסדר של אירועי BlockChange שנוספו ב-commit 5578458, מסיבות לא ברורות, אבל סביר להניח כחלק מניסיון חלקי בלבד לתקן בעיות בסדר האירועים במהלך מוטציות של בלוקים. כנראה שהקוד הזה היה צריך להתווסף לחלק העליון של הפונקציה, לפני המיזוג והסרת הערכים האפסיים, אבל הוא נוסף בחלק התחתון מסיבות שכבר לא זוכרים. בחקירות הבאגים האלה מפורטת סקירה מלאה יותר של הבעיה הבסיסית וחלק מהכשלים שנגרמו בגלל התיקון הלא מלא או השגוי:

https://github.com/google/blockly/issues/8225#issuecomment-2195751783 https://github.com/google/blockly/issues/2037#issuecomment-2209696351

בהמשך, בבקשת התיקון (PR) מספר 1205, ההטמעה המקורית מסוג O(n^2) הוחלפה בהטמעה בזמן לינארי, אבל לאחר מכן בוצעו תיקונים נוספים.

באוגוסט 2024 ביצענו כמה פעולות פשטוּת משמעותיות:

בעבר, הפונקציה הזו הוזמנה מ-Workspace.prototype.undo, אבל המוטציה של האירועים על ידי הפונקציה הזו הייתה הסיבה לבעיה מס' 7026 (שימו לב שהאירועים ישולבו בצורה שונה בסדר הפוך לעומת סדר ישיר). התיקון המקורי שנבחר לבעיה הזו היה הוספת קוד (ב-PR‏ #7069) ל-fireNow כדי לסנן את ‎.undoStack_ ו-‎.redoStack_ של כל סביבת עבודה שהשתתפה זה עתה בשליחת אירועים. נראה שהפתרון הזה פתר את הבעיה, אבל הוא הוסיף מורכבות רבה והקשה להבין איך האירועים עוברים עיבוד לצורך ביטול או ביצוע מחדש. לכן, הסרנו את הקריאה מ-undo ואת קוד העיבוד לאחר האירוע, והגדרתנו את forward=true כברירת המחדל, בעוד שהקריאה לפונקציה עם forward=false הוצאה משימוש.

במקביל, הקוד הפגום לשינוי הסדר של אירועי BlockChange הוחלף בגרסה פחות פגומה של אותה פונקציונליות בפונקציה חדשה, enqueueEvent, שנקראת מ-fireInternal. כך מובטח שהאירועים יהיו בסדר הנכון בזמן הקריאה של המסנן.

בנוסף, קוד המיזוג של האירועים השתנה כך שיתבצע מיזוג רק של אירועים סמוכים. כך הפשטנו את ההטמעה, תוך הבטחה ששילוב האירועים לא יוביל לשינוי הסדר שלהם.

fire(event)

הוספת אירוע לתור כדי לשלוח אותו למאזינים לשינויים.

הערות:

- האירועים נכנסים לתור עד לתפוגה, בדרך כלל אחרי שהעיבוד הושלם או בסוף המיקרו-משימה הנוכחית, אם היא לא פועלת בדפדפן. - אירועים שנמצאים בתור עשויים לעבור שינוי הרסני על ידי שילוב עם אירועים שיתווספו לתור מאוחר יותר, אבל רק עד שהם יופעלו. - האירועים מועברים באמצעות השיטה fireChangeListener בסביבת העבודה המושפעת.

fromJson(json, workspace) מפענחים את ה-JSON לאירוע.
get(eventType) אחזור המחלקה של סוג אירוע ספציפי מהמרשם.
getGroup() הקבוצה הנוכחית.
getRecordUndo() הפונקציה מחזירה אם אירועים יתווספו לערימה של הפעולות הלא רצויות או לא.
isEnabled() הפונקציה מחזירה אם ניתן להפעיל אירועים או לא.
setGroup(state) להתחיל או להפסיק קבוצה.
setRecordUndo(newValue) ההגדרה קובעת אם אירועים יתווספו למקבץ הפעולות הקודמות.

ממשקים

ממשק תיאור
AbstractEventJson
BlockBaseJson
BlockChangeJson
BlockCreateJson
BlockDeleteJson
BlockDragJson
BlockFieldIntermediateChangeJson
BlockMoveJson
BubbleOpenJson
ClickJson
CommentBaseJson
CommentChangeJson
CommentCollapseJson
CommentCreateJson
CommentDragJson
CommentMoveJson
CommentResizeJson
SelectedJson
ThemeChangeJson
ToolboxItemSelectJson
TrashcanOpenJson
VarBaseJson
VarCreateJson
VarDeleteJson
VarRenameJson
VarTypeChangeJson
ViewportChangeJson

משתנים

משתנה תיאור
BLOCK_CHANGE
BLOCK_CREATE
BLOCK_DELETE
BLOCK_DRAG
BLOCK_FIELD_INTERMEDIATE_CHANGE
BLOCK_MOVE
BUBBLE_OPEN
BUMP_EVENTS

רשימה של אירועים שגורמים להחזרת אובייקטים לחלק הגלוי של סביבת העבודה.

חשוב לא להתבלבל עם האפשרות 'הסרת משתתפים', שמאפשרת להסיר משתתפים מתוך שיחה כדי שהם לא יופיעו כמחוברים.

שינוי
קליק
COMMENT_CHANGE
COMMENT_CREATE
COMMENT_DELETE
COMMENT_DRAG
COMMENT_MOVE
COMMENT_RESIZE
יצירה
DELETE
FINISHED_LOADING
MOVE
נבחרה
THEME_CHANGE
TOOLBOX_ITEM_SELECT
TRASHCAN_OPEN
UI
VAR_CREATE
VAR_DELETE
VAR_RENAME
VIEWPORT_CHANGE

כינויים מסוג טקסט

Type Alias תיאור
BumpEvent

סוג האירועים שגורמים להחזרת אובייקטים לחלק הגלוי של סביבת העבודה.

חשוב לא להתבלבל עם האפשרות 'הסרת משתתפים', שמאפשרת להסיר משתתפים מתוך שיחה כדי שהם לא יופיעו כמחוברים.