blockly > 事件

事件命名空間

類別

類別 說明
BlockBase 用於任何與區塊相關的事件的抽象類別。
BlockChange 當區塊的某些元素 (例如欄位值、註解等) 發生變更時,會通知監聽器。
BlockCreate 在建立區塊 (或連結的區塊堆疊) 時通知監聽器。
BlockDelete 在刪除區塊 (或連結的區塊堆疊) 時通知監聽器。
BlockDrag 在手動拖曳/放置區塊時通知監聽器。
BlockFieldIntermediateChange 當區塊欄位的值已變更,但變更尚未完成,且預期會接著發生區塊變更事件時,會通知監聽器。
BlockMove 在區塊移動時通知監聽器。這可能是從一個連線到另一個連線,或是從工作區的一個位置到另一個位置。
BubbleOpen 泡泡開啟事件的類別。
點擊 通知事件監聽器,指出某個 Blockly 元素已被點選。
CommentBase 留言事件的抽象類別。
CommentChange 通知監聽器,工作區註解的內容已變更。
CommentCollapse
CommentCreate 通知監聽器,指出已建立工作區註解。
CommentDelete 通知事件監聽器,工作區註解已刪除。
CommentDrag 在使用者手動拖曳/放置留言時通知監聽器。
CommentMove 通知監聽器工作區的留言已移至其他位置。
CommentResize 通知監聽器,工作區註解已調整大小。
FinishedLoading 當工作區完成從 JSON/XML 反序列化時,會通知事件監聽器。
已選取 所選事件的類別。通知監聽器已選取新元素。
ThemeChange 通知監聽器工作區主題已變更。
ToolboxItemSelect 通知監聽器已選取工具箱項目。
TrashcanOpen 在垃圾桶開啟或關閉時通知監聽器。
UiBase UI 事件的基本類別。UI 事件是指不需要透過網路傳送的事件,才能讓多使用者編輯功能運作 (例如捲動工作區、縮放、開啟工具箱分類)。UI 事件不會復原或重做。
VarBase 變數事件的抽象類別。
VarCreate 通知監聽器,已建立變數模型。
VarDelete 通知監聽器變數模型已刪除。
VarRename 通知監聽器變數模型已重新命名。
VarTypeChange 通知監聽器變數類型已變更。
ViewportChange

通知監聽器,工作區域介面的大小或位置已變更。

不會在工作區本身調整大小時發出通知。

抽象類別

抽象類別 說明
摘要 事件的抽象類別。

列舉

Enumeration 說明
BubbleType
ClickTarget

函式

函式 說明
clearPendingUndo() 修改待處理的復原事件,以便在事件觸發時不會進入復原堆疊。由 Workspace.clearUndo 呼叫。
disable() 停止傳送事件。每個對此函式的呼叫都必須呼叫 enable。
disableOrphans(event) 設定是否要根據連線是否正確,停用某個區塊。在所有區塊都應連結至頂層區塊的應用程式中使用。
enable() 開始傳送事件。除非在呼叫對應的停用方法時,事件已停用。
filter(queue)

合併重複事件、移除空值事件,並重新記錄 BlockChange 事件,藉此篩選佇列中的事件。

這個函式的歷史記錄:

這個函式最初是在 cf257ea5 版本中新增,目的是大幅減少分派事件的總數。一開始,這項問題只影響 BlockMove 事件,但後來其他事件也受到影響。

我們新增程式碼,以便重新排序在 5578458 次版本中新增的 BlockChange 事件,但原因不明,但很可能是在嘗試修正區塊變異期間事件排序問題時,只部分成功的結果。這個程式碼應該會在合併和移除空值之前,新增至函式的頂端,但基於現在已遺忘的原因,它被新增至底部。請參閱這些錯誤調查,進一步瞭解潛在問題,以及由於這個不完整/不正確的修正而發生的部分錯誤:

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

之後,在 PR #1205 中,原始的 O(n^2) 實作方式已由線性時間實作方式取代,但後續也進行了額外的修正。

2024 年 8 月,我們做出了許多重大簡化:

這個函式先前是從 Workspace.prototype.undo 呼叫,但這個函式會變異事件,導致問題 #7026 (請注意,事件會以相反順序與順序相加)。我們最初選擇的修正方式是新增程式碼 (在 PR #7069 中),以便在 fireNow 後,為任何剛參與事件調度的作業空間,執行後置篩選的 .undoStack_ 和 .redoStack_。這個方法顯然解決了問題,但也增加了相當程度的額外複雜性,讓人難以推論如何處理撤銷/重做事件,因此我們移除了來自撤銷的呼叫和後置處理程式碼,並將 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

導致物件被推回工作區可見部分的事件清單。

請勿與「bumping」混淆,因為「bumping」會讓已中斷的連線不會顯示為已連線。

變更
點選
COMMENT_CHANGE
COMMENT_CREATE
COMMENT_DELETE
COMMENT_DRAG
COMMENT_MOVE
COMMENT_RESIZE
CREATE
刪除
FINISHED_LOADING
MOVE
已選取
THEME_CHANGE
TOOLBOX_ITEM_SELECT
TRASHCAN_OPEN
UI
VAR_CREATE
VAR_DELETE
VAR_RENAME
VIEWPORT_CHANGE

型別別名

類型別名 說明
BumpEvent

導致物件被推回工作區可見部分的事件類型。

請勿與「bumping」混淆,因為「bumping」會讓已中斷的連線不會顯示為已連線。