您可以替換對應的 Blockly 類別,自訂特定功能。
可替換的類別
可以取代的 Blockly 類別如下:
Blockly 類別 | 介面 | 登錄類型名稱 |
---|---|---|
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 |
-- |
如要瞭解如何取代算繪器,請參閱「建立自訂算繪器」。
建立替代類別
如要建立替代類別,請實作對應介面中的函式。您可以在新類別中實作所有這些函式,也可以擴充 Blockly 類別,並只覆寫要變更的函式。唯一的要求是您 (或基底類別) 必須實作介面中的所有函式,並遵守介面註解中說明的任何規定。
如要向型別檢查程式指出您實作特定介面,請使用 @implements {InterfaceName}
JSDoc 標記 (在 JavaScript 中) 或 implements
關鍵字 (在 TypeScript 中) 註解類別。
向 Blockly 說明替代類別
您可以透過兩種方式告知 Blockly 替代類別:將其註冊為該類型的預設類別 (建議),或使用 plugins
設定選項注入。
將替代類別註冊為預設類別
如要向 Blockly 說明替代類別,建議您將其註冊為該類型的預設值。如要執行此操作,請使用名稱 Blockly.registry.DEFAULT
呼叫 Blockly.registry.register
,並將 opt_allowOverrides
參數設為 true
。
Blockly.registry.register(
Blockly.registry.Type.VARIABLE_MODEL,
Blockly.registry.DEFAULT,
CustomVariableModel,
true,
);
插入替代類別
您也可以使用 plugins
configuration
option 插入替代類別。
這個物件會使用登錄型別名稱做為屬性名稱,並使用替代類別或已登錄的名稱做為屬性值。
(雖然 plugins
屬性的名稱與用於擴充 Blockly 的外掛程式類似,但您的類別不需要透過 npm 封裝及發布。)
將替代類別傳遞至 Blockly.inject
:
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': CustomMetricsManagerClass
}
}
或者,使用 Blockly.registry.register
註冊類別,並將註冊名稱傳遞至 Blockly.inject
。如果您將設定選項儲存為純 JSON,這項功能就非常實用。
Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', CustomMetricsManagerClass);
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': 'YOUR_NAME'
}
}