# 事件

工作区上的每个更改都会触发一个事件。这些事件完整地描述了每个变化的前后状态。

# 监听事件

工作区具有可用于侦听事件流的 addChangeListener 方法和 removeChangeListener 方法。一个例子是 实时生成代码。另一个例子是 块最大数量限制演示 (opens new window)。通常情况下,这两个例子都不关心触发事件是什么。他们只是查看工作区的当前状态。

更复杂的事件监听器将查看触发事件。以下示例检测用户何时创建其第一条注释,发出警报,然后停止监听,以便不再触发其他警报。

function onFirstComment(event) {
  if (
    event.type == Blockly.Events.CHANGE &&
    event.element == 'comment' &&
    !event.oldValue &&
    event.newValue
  ) {
    alert('Congratulations on creating your first comment!');
    workspace.removeChangeListener(onFirstComment);
  }
}
workspace.addChangeListener(onFirstComment);

为了监听弹出事件中发生的任意事件,可以将一个侦听器添加到弹出的工作区中。

var flyoutWorkspace = yourWorkspace.getFlyout().getWorkspace();
flyoutWorkspace.addChangeListener(onFirstComment);

块具有另一种侦听事件流的方法。块可以定义一个 onchange 函数或使用 setOnChange,只要块的工作空间发生更改,就会调用该函数。

# 事件类型

请参阅 参考文档 以获取有关各个事件的信息。

# 演示

如果您想了解有关事件的一些有趣示例,可以查看 mirror demo (opens new window)。该演示展示了两个 Blockly 工作区如何通过事件保持同步。