Le estensioni sono funzioni che vengono eseguite su un blocco durante l'inizializzazione. Spesso aggiungono configurazione o comportamento personalizzati a un blocco. I mixin ti consentono di aggiungere proprietà o funzioni di supporto a un blocco, ma non di eseguirli immediatamente.
Devi utilizzare estensioni o mixin solo quando definisci un blocco con JSON. Se utilizzi JavaScript per definire un blocco, puoi chiamare le funzioni di inizializzazione direttamente in init
e aggiungere metodi o proprietà direttamente alla definizione.
Estensioni
Le estensioni sono funzioni che vengono eseguite su ogni blocco di un determinato tipo durante la sua creazione. Ad esempio, possono aggiungere una configurazione personalizzata (ad es. impostare la descrizione comando del blocco) o un comportamento personalizzato (ad es. aggiungere un gestore eventi al blocco).
// 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'];
});
});
Le estensioni devono essere "registrate" per poter essere associate a una chiave di stringa. Poi puoi assegnare questa chiave di stringa alla proprietà extensions
della definizione JSON del tipo di blocco per applicare l'estensione al blocco.
{
//...,
"extensions": ["parent_tooltip_extension",]
}
Puoi anche aggiungere più estensioni contemporaneamente. Tieni presente che la proprietà extensions
deve essere un array, anche se stai applicando una sola estensione.
{
//...,
"extensions": ["parent_tooltip_extension", "break_warning_extension"],
}
Mixin
Blockly fornisce anche un metodo pratico per le situazioni in cui vuoi aggiungere alcune proprietà/funzioni di supporto a un blocco, ma non eseguirle immediatamente. Questo funziona consentendoti di registrare un oggetto mixin che contiene tutte le proprietà/i metodi aggiuntivi. L'oggetto mixin viene poi racchiuso in una funzione che applica il mixin ogni volta che viene creata un'istanza del tipo di blocco specificato.
Blockly.Extensions.registerMixin('my_mixin', {
someProperty: 'a cool value',
someMethod: function() {
// Do something cool!
}
))`
Le chiavi di stringa associate ai mixin possono essere richiamate in JSON come qualsiasi altra estensione.
{
//...,
"extensions": ["my_mixin"],
}