Erweiterungen sind Funktionen, die während der Initialisierung auf einem Block ausgeführt werden. Damit wird einem Block oft eine benutzerdefinierte Konfiguration oder ein benutzerdefiniertes Verhalten hinzugefügt. Mit Mixins können Sie einem Block Eigenschaften oder Hilfsfunktionen hinzufügen, sie aber nicht sofort ausführen.
Erweiterungen oder Mixins müssen nur verwendet werden, wenn Sie einen Block mit JSON definieren. Wenn Sie einen Block mit JavaScript definieren, können Sie Initialisierungsfunktionen direkt in init
aufrufen und der Definition Methoden oder Eigenschaften direkt hinzufügen.
Erweiterungen
Erweiterungen sind Funktionen, die beim Erstellen eines Blocks für jeden Block eines bestimmten Typs ausgeführt werden. So können sie beispielsweise eine benutzerdefinierte Konfiguration (z.B. die Kurzinfo des Blocks festlegen) oder ein benutzerdefiniertes Verhalten (z.B. dem Block einen Ereignis-Listener hinzufügen) hinzufügen.
// 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'];
});
});
Erweiterungen müssen „registriert“ werden, damit sie einem Stringschlüssel zugeordnet werden können. Anschließend können Sie diesen Stringschlüssel der extensions
-Eigenschaft der JSON-Definition Ihres Blocktyps zuweisen, um die Erweiterung auf den Block anzuwenden.
{
//...,
"extensions": ["parent_tooltip_extension",]
}
Sie können auch mehrere Erweiterungen gleichzeitig hinzufügen. Die Property extensions
muss ein Array sein, auch wenn Sie nur eine Erweiterung anwenden.
{
//...,
"extensions": ["parent_tooltip_extension", "break_warning_extension"],
}
Mixins
Blockly bietet auch eine praktische Methode für Situationen, in denen Sie einem Block einige Eigenschaften/Hilfsfunktionen hinzufügen, sie aber nicht sofort ausführen möchten. Dazu registrieren Sie ein Mixin-Objekt, das alle zusätzlichen Eigenschaften/Methoden enthält. Das Mixin-Objekt wird dann in eine Funktion verpackt, die den Mixin jedes Mal anwendet, wenn eine Instanz des angegebenen Blocktyps erstellt wird.
Blockly.Extensions.registerMixin('my_mixin', {
someProperty: 'a cool value',
someMethod: function() {
// Do something cool!
}
))`
Auf Stringschlüssel, die mit Mixins verknüpft sind, kann in JSON-Dateien wie auf jede andere Erweiterung verwiesen werden.
{
//...,
"extensions": ["my_mixin"],
}