تتيح لك Blockly تخصيص وظائف معيّنة من خلال استبدال فئات 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.register
باستخدام الاسم Blockly.registry.DEFAULT
واضبط المَعلمة opt_allowOverrides
على true
.
Blockly.registry.register(
Blockly.registry.Type.VARIABLE_MODEL,
Blockly.registry.DEFAULT,
CustomVariableModel,
true,
);
إدخال فئة الاستبدال
يمكنك أيضًا إدخال فئات بديلة باستخدام plugins
خيار الإعداد.
هذا عنصر يستخدِم أسماء أنواع السجلّ كأسماء سمات وفئات بديلة أو أسماء مسجّلة كقيم سمات.
(على الرغم من اسم السمة plugins
، لا تحتاج فئتك إلى أن تكون
مجمّعة وموزّعة من خلال npm مثل المكوّنات الإضافية المستخدَمة لتوسيع
Blockly.)
إما أن تنقل صفك البديل إلى 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'
}
}