Blockly 可让您通过替换相应的 Blockly 类来自定义某些功能。
可替换的类
以下 Blockly 类可以替换:
Blockly 类 | 接口 | 注册类型名称 |
---|---|---|
Blockly.dragging.Dragger |
Blockly.IDragger |
blockDragger |
Blockly.ConnectionChecker |
Blockly.IConnectionChecker |
connectionChecker |
Blockly.InsertionMarkerPreviewer |
Blockly.IConnectionPreviewer |
connectionPreviewer |
Blockly.HorizontalFlyout |
Blockly.IFlyout |
flyoutsHorizontalToolbox |
Blockly.VerticalFlyout |
Blockly.IFlyout |
flyoutsVerticalToolbox |
Blockly.MetricsManager |
Blockly.IMetricsManager |
metricsManager |
Blockly.Toolbox |
Blockly.IToolbox |
toolbox |
Blockly.VariableMap |
Blockly.IVariableMap |
variableMap |
Blockly.VariableModel |
Blockly.IVariableModel |
-- |
如需了解如何替换渲染器,请参阅创建自定义渲染器。
创建替换类
如需创建替换类,请实现相应接口中的函数。您可以在新类中实现所有这些函数,也可以扩展 Blockly 类并仅替换要更改的函数。唯一的要求是,您(或基类)必须实现接口中的所有函数,并遵守接口注释中描述的所有要求。
如需向类型检查器表明您实现了特定接口,请使用 @implements {InterfaceName}
JSDoc 标记(在 JavaScript 中)或 implements
关键字(在 TypeScript 中)为您的类添加注释。
向 Blockly 说明替换类
您可以通过两种方式告知 Blockly 替换类:将其注册为相应类型的默认类(首选),或使用 plugins
配置选项注入该类。
将替换类注册为默认类
向 Blockly 告知替换类的首选方式是将其注册为相应类型的默认类。为此,请使用名称 Blockly.registry.DEFAULT
调用 Blockly.registry.register
,并将 opt_allowOverrides
参数设置为 true
。
Blockly.registry.register(
Blockly.registry.Type.VARIABLE_MODEL,
Blockly.registry.DEFAULT,
CustomVariableModel,
true,
);
注入替换类
您还可以使用 plugins
配置选项注入替换类。这是一个使用注册表类型名称作为属性名称,并使用替换类或注册名称作为属性值的对象。
(尽管 plugins
属性的名称如此,但您的类无需像用于扩展 Blockly 的插件那样通过 npm 进行打包和分发。)
将替换类传递给 Blockly.inject
:
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': CustomMetricsManagerClass
}
}
或者,您可以使用 Blockly.registry.register
注册类,并将注册的名称传递给 Blockly.inject
。如果您将配置选项存储为纯 JSON,则此方法非常有用。
Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', CustomMetricsManagerClass);
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': 'YOUR_NAME'
}
}