Blockly转换器:定义与使用

需积分: 0 0 下载量 122 浏览量 更新于2024-08-05 收藏 238KB PDF 举报
"4.15存取器1" 是关于转换器(Mutator)的讨论,这是一个在Blockly编程环境中用于扩展块功能的关键概念。转换器允许用户自定义块的行为,比如添加或移除输入、改变块的结构等,并且能够确保这些更改在序列化到XML时得以保存和在加载时正确恢复。 转换器不仅仅是为了改变块的外观,它还定义了将这些变化保存到XML文件以及从XML文件加载的规则。在没有转换器的情况下,一些复杂的修改可能无法正确地进行保存和加载。转换器通常涉及到一些在块实例化时混合到块对象中的方法,有时候还会包含供用户配置的UI界面。 要注册一个转换器,你需要使用 `Blockly.Extensions.registerMutator` 函数,传入转换器的名称、包含转换方法的对象、可选的辅助函数以及可选的块列表。`name` 参数是转换器在JSON中使用的唯一标识符,`mixinObj` 包含了`mutationToDom` 和 `domToMutation` 等关键方法,`opt_helperFn` 可用于在混合后对块执行额外的操作,而`opt_blockList` 则用于指定与默认编辑UI一起使用的子块列表。 `mutationToDom` 方法负责将块的转换状态转换为XML格式,而 `domToMutation` 方法则负责从XML中读取信息并恢复块的状态。这些方法对于在XML序列化和反序列化过程中保持转换器的状态至关重要。 例如,`math.js` 中的 `math_number_property` 块是一个具有下拉菜单的块,用户可以选择不同的属性(如"偶数"、"奇数"等)。如果选择"可被整除",转换器会添加一个新的输入,让用户输入除数。这种动态添加和移除输入的功能,正是通过转换器的 `mutationToDom` 和 `domToMutation` 方法实现的。 当块从XML中创建,如在工具箱中显示、克隆或者从保存的文件中导入时,转换器确保这些额外的输入能够正确地呈现和恢复。因此,转换器是Blockly中实现高级定制和交互性的重要组成部分,它允许开发者创建更加灵活和丰富的编程环境。