Blockly ti consente di personalizzare alcune funzionalità sostituendo le classi Blockly corrispondenti.
Classi sostituibili
È possibile sostituire le seguenti classi Blockly:
Corso Blockly | Interfaccia | Nome del tipo di registro |
---|---|---|
Blockly.dragging.Dragger |
Blockly.IDragger |
blockDragger |
Blockly.ConnectionChecker |
Blockly.IConnectionChecker |
connectionChecker |
Blockly.InsertionMarkerPreviewer |
Blockly.IConnectionPreviewer |
connectionPreviewer |
Blockly.HorizontalFlyout |
Blockly.IFlyout |
flyoutsHorizontalToolbox |
Blockly.VerticalFlyout |
Blockly.IFlyout |
flyoutsVerticalToolbox |
Blockly.MetricsManager |
Blockly.IMetricsManager |
metricsManager |
Blockly.Toolbox |
Blockly.IToolbox |
toolbox |
Blockly.VariableMap |
Blockly.IVariableMap |
variableMap |
Blockly.VariableModel |
Blockly.IVariableModel |
-- |
Per informazioni su come sostituire un renderer, consulta Creare renderer personalizzati.
Creare una classe sostitutiva
Per creare una classe sostitutiva, implementa le funzioni nell'interfaccia corrispondente. Puoi implementare tutte queste funzioni in una nuova classe o estendere la classe Blockly e sostituire solo le funzioni che vuoi modificare. L'unico requisito è che tu (o la classe base) implementi tutte le funzioni nell'interfaccia e rispetti tutti i requisiti descritti nei commenti sull'interfaccia.
Per indicare al controllo del tipo che implementi un'interfaccia specifica,
annotare la classe con il tag JSDoc @implements {InterfaceName}
(in
JavaScript) o la parola chiave implements
(in TypeScript).
Comunicare a Blockly la classe sostitutiva
Esistono due modi per comunicare a Blockly la classe di sostituzione: registrarla come
classe predefinita del suo tipo (opzione preferita) o inserirla utilizzando l'opzione di configurazione plugins
.
Registrare la classe sostitutiva come predefinita
Il modo migliore per comunicare a Blockly la classe di sostituzione è registrarla
come predefinita per il suo tipo. Per farlo, chiama Blockly.registry.register
utilizzando il nome Blockly.registry.DEFAULT
e imposta il parametro opt_allowOverrides
su true
.
Blockly.registry.register(
Blockly.registry.Type.VARIABLE_MODEL,
Blockly.registry.DEFAULT,
CustomVariableModel,
true,
);
Inserisci la classe sostitutiva
Puoi anche inserire classi di sostituzione utilizzando l'opzione di configurazione plugins
.
Si tratta di un oggetto che utilizza i nomi dei tipi di registro come
nomi delle proprietà e le classi di sostituzione o i nomi registrati come valori delle proprietà.
Nonostante il nome della proprietà plugins
, la tua classe non deve essere
pacchettizzata e distribuita tramite npm come i plug-in utilizzati per estendere
Blockly.
Supera il corso sostitutivo entro il giorno Blockly.inject
:
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': CustomMetricsManagerClass
}
}
In alternativa, registra la classe utilizzando Blockly.registry.register
e passa il nome registrato a Blockly.inject
. Questo è utile se memorizzi le opzioni di configurazione
come JSON puro.
Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', CustomMetricsManagerClass);
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': 'YOUR_NAME'
}
}