As extensões são funções executadas em um bloco durante a inicialização. Elas geralmente adicionam algum comportamento ou configuração personalizada a um bloco. Os mixins permitem adicionar propriedades ou funções auxiliares a um bloco, mas não os executam imediatamente.
Você só precisa usar extensões ou mixins quando definir um bloco com JSON. Se
você usar JavaScript para definir um bloco, poderá chamar funções de inicialização
diretamente em init
e adicionar métodos ou propriedades diretamente à definição.
Extensões
As extensões são funções executadas em cada bloco de um determinado tipo conforme o bloco é criado. Por exemplo, eles podem adicionar uma configuração personalizada (por exemplo, definir a dica do bloco) ou um comportamento personalizado (por exemplo, adicionar um listener de eventos ao bloco).
// 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'];
});
});
As extensões precisam ser "registradas" para serem associadas a uma chave de
string. Em seguida, você pode atribuir essa chave de string à propriedade extensions
da
definição
JSON do tipo de bloco para aplicar
a extensão ao bloco.
{
//...,
"extensions": ["parent_tooltip_extension",]
}
Também é possível adicionar várias extensões de uma só vez. A propriedade extensions
precisa ser uma matriz, mesmo que você esteja aplicando apenas uma extensão.
{
//...,
"extensions": ["parent_tooltip_extension", "break_warning_extension"],
}
Mixins
O Blockly também oferece um método conveniente para situações em que você quer adicionar algumas propriedades/funções auxiliares a um bloco, mas não quer executá-las imediatamente. Isso permite que você registre um objeto mixin que contém todas as propriedades/métodos adicionais. O objeto mixin é então envolvido em uma função que aplica o mixin sempre que uma instância do tipo de bloco especificado é criada.
Blockly.Extensions.registerMixin('my_mixin', {
someProperty: 'a cool value',
someMethod: function() {
// Do something cool!
}
))`
As chaves de string associadas a mixins podem ser referenciadas em JSON, assim como qualquer outra extensão.
{
//...,
"extensions": ["my_mixin"],
}