事件命名空间
类
| 类 | 说明 |
|---|---|
| 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 | 通知监听器工作区 Surface 的位置或缩放比例已更改。 当工作区本身调整大小时,不会发出通知。 |
抽象类
| 抽象类 | 说明 |
|---|---|
| 摘要 | 事件的抽象类。 |
枚举
| 枚举 | 说明 |
|---|---|
| BubbleType | |
| ClickTarget |
函数
| 函数 | 说明 |
|---|---|
| clearPendingUndo() | 修改待处理的撤消事件,以便在这些事件触发时,它们不会进入撤消堆栈。由 Workspace.clearUndo 调用。 |
| disable() | 停止发送事件。对此函数的每次调用都必须调用 enable。 |
| disableOrphans(event) | 根据块是否已正确连接,设置块是否已停用。在所有块都应连接到顶部块的应用中使用此模式。 |
| enable() | 开始发送事件。除非在发出相应的停用调用时事件已停用。 |
| filter(queue) | 通过合并重复项、移除 null 事件和重新记录 BlockChange 事件来过滤队列中的事件。 此函数的历史记录: 此函数最初是在提交版本 cf257ea5 中添加的,目的是大幅减少分派的事件总数。最初,此问题仅会影响 BlockMove 事件,但后来又影响了其他事件。 添加了代码来重新排列提交 5578458 中添加的 BlockChange 事件,原因不明,但很可能是在尝试解决块更新期间事件排序问题时,仅部分成功。此代码可能应在合并和移除 null 之前添加到函数顶部,但出于现在已忘记的原因,被添加到了底部。如需更详细地了解根本问题以及因此不完整/不正确的修复而导致的一些失败情况,请参阅以下 bug 调查: 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 的原因(请注意,事件在反向顺序与正向顺序下会组合不同)。最初为此问题选择的解决方法是在 fireNow 中添加了代码(在 PR #7069 中),以对刚刚参与调度事件的任何工作区的 .undoStack_ 和 .redoStack_ 进行后续过滤;这显然解决了问题,但增加了相当多的额外复杂性,并且难以推理撤消/重做事件的处理方式,因此移除了从撤消调用和后处理代码,并将 forward=true 设为默认值,同时废弃了使用 forward=false 调用函数的做法。 同时,用于重新排列 BlockChange 事件的存在 bug 的代码已替换为通过 fireInternal 调用的 enqueueEvent 新函数中提供的功能的 bug 较少的版本,从而确保在调用过滤器时事件将按正确的顺序排列。 此外,我们修改了事件合并代码,以便仅合并紧挨的事件。这简化了实现,同时确保了事件合并不会导致事件重新排序。 |
| fire(event) | 将事件加入队列,以便分派给更改监听器。 注意: - 事件会加入队列,直到超时为止(通常是在渲染完成后或当前微任务结束时,如果未在浏览器中运行)。- 加入队列的事件会与之后加入队列的事件组合,从而发生破坏性修改,但仅在事件触发之前。- 事件会通过受影响工作区的 fireChangeListener 方法分派。 |
| fromJson(json, workspace) | 将 JSON 解码为事件。 |
| get(eventType) | 从注册表中获取特定事件类型的类。 |
| getGroup() | 当前组。 |
| getRecordUndo() | 返回事件是否会添加到撤消堆栈。 |
| isEnabled() | 返回是否可以触发事件。 |
| setGroup(state) | 开始或停止组合。 |
| setRecordUndo(newValue) | 设置是否应将事件添加到撤消堆栈。 |
接口
变量
| 变量 | 说明 |
|---|---|
| BLOCK_CHANGE | |
| BLOCK_CREATE | |
| BLOCK_DELETE | |
| BLOCK_DRAG | |
| BLOCK_FIELD_INTERMEDIATE_CHANGE | |
| BLOCK_MOVE | |
| BUBBLE_OPEN | |
| BUMP_EVENTS | 导致对象被弹回到工作区的可见部分的事件列表。 请勿与“bumping”混淆,以免断开连接的连接看起来仍处于连接状态。 |
| 更改 | |
| 点击 | |
| COMMENT_CHANGE | |
| COMMENT_CREATE | |
| COMMENT_DELETE | |
| COMMENT_DRAG | |
| COMMENT_MOVE | |
| COMMENT_RESIZE | |
| 创建 | |
| DELETE | |
| FINISHED_LOADING | |
| MOVE | |
| 已选 | |
| THEME_CHANGE | |
| TOOLBOX_ITEM_SELECT | |
| TRASHCAN_OPEN | |
| 界面 | |
| VAR_CREATE | |
| VAR_DELETE | |
| VAR_RENAME | |
| VIEWPORT_CHANGE |
类型别名
| 类型别名 | 说明 |
|---|---|
| BumpEvent | 导致对象被弹回到工作区的可见部分的事件类型。 请勿与“bumping”混淆,以免断开连接的连接看起来仍处于连接状态。 |