Rozszerzenia to funkcje, które są wykonywane w bloku podczas inicjalizacji. Często dodają one do bloku niestandardową konfigurację lub zachowanie. Mixiny umożliwiają dodawanie właściwości lub funkcji pomocniczych do bloku, ale nie można ich uruchomić od razu.
Rozszerzeń lub miksów używaj tylko wtedy, gdy definiujesz blok za pomocą JSON. Jeśli do definiowania bloku używasz JavaScriptu, możesz wywoływać funkcje inicjowania bezpośrednio w init
i dodawać metody lub właściwości bezpośrednio do definicji.
Rozszerzenia
Rozszerzenia to funkcje, które są wykonywane w przypadku każdego bloku danego typu w momencie jego tworzenia. Możesz na przykład dodać niestandardową konfigurację (np. ustawić tekst podpowiedzi bloku) lub niestandardowe działanie (np. dodać do bloku odbiornika zdarzeń).
// 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'];
});
});
Rozszerzenia muszą być „zarejestrowane”, aby można je było powiązać z ciągiem znaków klucza. Następnie możesz przypisać ten klucz ciągu znaków do właściwości extensions
w definicji JSON typu bloku, aby zastosować rozszerzenie do bloku.
{
//...,
"extensions": ["parent_tooltip_extension",]
}
Możesz też dodać wiele rozszerzeń naraz. Pamiętaj, że właściwość extensions
musi być tablicą, nawet jeśli stosujesz tylko 1 rozszerzenie.
{
//...,
"extensions": ["parent_tooltip_extension", "break_warning_extension"],
}
Mixins
Blockly udostępnia też wygodną metodę na dodawanie do bloku niektórych właściwości lub funkcji pomocniczych, które nie muszą być wykonywane od razu. Umożliwia to zarejestrowanie obiektu mixin, który zawiera wszystkie dodatkowe właściwości i metody. Obiekt mixin jest następnie umieszczany w funkcji, która stosuje go za każdym razem, gdy tworzony jest element danego typu bloku.
Blockly.Extensions.registerMixin('my_mixin', {
someProperty: 'a cool value',
someMethod: function() {
// Do something cool!
}
))`
Klucze tekstowe powiązane z mixinami mogą być używane w plikach JSON tak samo jak inne rozszerzenia.
{
//...,
"extensions": ["my_mixin"],
}