扩展是指在初始化期间对某个代码块运行的函数。这些插件通常会向代码块添加一些自定义配置或行为。借助混入函数,您可以向代码块添加属性或辅助函数,但不会立即运行它们。
只有在使用 JSON 定义块时,您才需要使用扩展或混入。如果您使用 JavaScript 定义块,则可以直接在 init
中调用初始化函数,并直接将方法或属性添加到定义中。
扩展程序
扩展程序是指在创建给定类型的每个分块时,在该分块上运行的函数。例如,它们可以添加自定义配置(例如设置块的提示)或自定义行为(例如向块添加事件监听器)。
// This extension sets the block's tooltip to be a function which displays
// the parent block's tooltip (if it exists).
Blockly.Extensions.register(
'parent_tooltip_extension',
function() { // this refers to the block that the extension is being run on
var thisBlock = this;
this.setTooltip(function() {
var parent = thisBlock.getParent();
return (parent && parent.getInputsInline() && parent.tooltip) ||
Blockly.Msg['MATH_NUMBER_TOOLTIP'];
});
});
扩展程序必须“注册”,才能与字符串键相关联。然后,您可以将此字符串键分配给代码块类型的 JSON 定义的 extensions
属性,以将扩展程序应用于代码块。
{
//...,
"extensions": ["parent_tooltip_extension",]
}
您还可以一次添加多个扩展程序。请注意,extensions
属性必须为数组,即使您只应用一个扩展程序也是如此。
{
//...,
"extensions": ["parent_tooltip_extension", "break_warning_extension"],
}
Mixin
如果您想向某个代码块添加一些属性/辅助函数,但不立即运行它们,Blockly 还提供了一种便捷的方法。具体方法是,您可以注册一个包含所有其他属性/方法的 mixin 对象。然后,将混入对象封装在一个函数中,该函数会在每次创建给定块类型的实例时应用混入。
Blockly.Extensions.registerMixin('my_mixin', {
someProperty: 'a cool value',
someMethod: function() {
// Do something cool!
}
))`
与混合项关联的字符串键可在 JSON 中引用,就像任何其他扩展程序一样。
{
//...,
"extensions": ["my_mixin"],
}